クラスタリングとは?業務データを使った顧客分類の考え方とPython実例

はじめに

企業内でDXやデータ活用を進める際、「業務データはあるが、何から分析すればよいかわからない」という相談は少なくありません。

売上データ、購買履歴、取引先データ、問い合わせ履歴、案件管理表などはあるものの、集計表やグラフを作るだけで終わってしまい、顧客理解や施策検討にうまくつながらないケースがあります。

そのようなときに、初期分析として検討しやすい手法の一つがクラスタリングです。

クラスタリングとは、正解ラベルがないデータを、似た特徴を持つグループに分ける分析手法です。たとえば、顧客を「購入頻度が高い顧客」「購入金額が大きい顧客」「しばらく購入がない顧客」のように整理し、営業・販促・経営判断の材料にできます。

本記事では、DX推進部門、経営者、データ活用を任された担当者向けに、クラスタリングの基本、k-meansクラスタリングの考え方、RFM指標を使った顧客分類、Pythonによる実装例を解説します。

なお、クラスタリングは施策を自動で決めるものではありません。分析結果は、顧客理解や施策検討のための「議論の材料」として扱うことが重要です。

クラスタリングとは何か

クラスタリングは、データを似た特徴ごとのグループに分ける分析手法です。

機械学習の分類では、あらかじめ「優良顧客」「休眠顧客」などの正解ラベルがある場合があります。一方、クラスタリングでは、事前に正解ラベルがない状態で、データの特徴からグループ分けをします。

このような手法は、教師なし学習と呼ばれます。

業務データでは、次のような場面でクラスタリングが使われます。

対象クラスタリングの例
顧客購入頻度・購入金額・最終購入日でグループ化してみる
取引先売上規模・取引頻度・継続年数でグループ化してみる
商品販売数量・粗利・季節性でグループ化してみる
店舗売上構成・客層・来店傾向でグループ化してみる
問い合わせ件数・内容・対応時間でグループ化してみる

クラスタリングの目的は、単にグループを作ることではありません。

業務上の特徴を整理し、次の打ち手を考えるための視点を作ることです。

業務データでクラスタリングが役立つ場面

クラスタリングは、顧客や取引先を一律に扱うのではなく、特徴ごとに分けて考えたい場合に役立ちます。

たとえば、顧客管理では売上金額だけを見てしまいがちです。しかし、売上金額が同じでも、次のように状況が異なることがあります。

  • 最近も頻繁に購入している顧客
  • 過去には大きく購入していたが、最近は購入がない顧客
  • 購入金額は小さいが、定期的に購入している顧客
  • 購入回数は少ないが、1回あたりの金額が大きい顧客

これらを同じように扱うと、営業フォローや販促施策の優先順位を考えにくくなります。

クラスタリングを使うと、売上金額だけでなく、購入頻度、最終購入日、購入金額などを組み合わせて顧客を整理できます。

顧客分類に使えるRFM指標

顧客クラスタリングでは、RFM指標がよく使われます。

RFMとは、以下の3つの指標です。

指標意味業務上の解釈
Recency最終購入からの日数最近購入しているか
Frequency購入回数どの程度頻繁に購入しているか
Monetary購入金額どの程度の金額を購入しているか

たとえば、以下のような顧客データを考えます。

customer_idrecency_daysfrequencymonetary
C0011225450000
C002180215000
C00345885000
C004740900000

このように、顧客ごとにRFM指標を作成すると、顧客の特徴を数値として比較しやすくなります。

ただし、RFMだけで顧客理解が完了するわけではありません。業種によっては、購入商品カテゴリ、契約期間、問い合わせ履歴、地域、業種、営業担当なども重要になる場合があります。

k-meansクラスタリングの基本

クラスタリング手法には複数ありますが、初学者が理解しやすい代表的な手法にk-meansクラスタリングがあります。

k-meansは、データを指定した数のクラスタに分ける手法です。scikit-learnのKMeansでは、n_clustersで形成するクラスタ数と重心数を指定します。

k-meansを業務データに使う際は、以下の点が重要です。

  • クラスタ数を事前に決める必要がある
  • 距離に基づいてグループ分けする
  • 金額・回数・日数など、単位が異なる特徴量は標準化が必要になる
  • 外れ値の影響を受ける場合がある
  • 結果は業務文脈で解釈する必要がある

たとえば、Monetaryは金額、Frequencyは回数、Recencyは日数です。このまま距離を計算すると、金額のように値が大きい特徴量の影響が強くなりすぎることがあります。

そのため、クラスタリング前に標準化を行うことが一般的です。scikit-learnのStandardScalerは、各特徴量から平均を引き、単位分散になるようにスケーリングする前処理です。

Pythonで顧客クラスタリングを試す実例

ここでは、公開データを用いて、顧客クラスタリングの流れを紹介します。

使用するのは、UCI Machine Learning Repositoryの Online Retail Dataset です。このデータは、英国のオンライン小売業者の取引データで、2010年12月1日から2011年12月9日までの取引を含み、分類・クラスタリング用途が示されています。データには、InvoiceNo、StockCode、Quantity、InvoiceDate、UnitPrice、CustomerID、Countryなどの項目があります。

また、このデータセットはCC BY 4.0ライセンスで提供されており、適切なクレジット表示を前提に共有・改変が可能とされています。

以下は、RFM指標を作成し、k-meansクラスタリングを行うサンプルコードです。

このコードでは、以下の流れで分析しています。

  1. 取引データを読み込む
  2. 顧客IDがないデータやキャンセル取引を除外する
  3. 売上金額を作成する
  4. 顧客単位でRFM指標を作成する
  5. RFM指標を標準化する
  6. k-meansでクラスタリングする
  7. クラスタ別の平均値を確認する
  8. PCAで2次元に可視化する

このような処理により、顧客を似た購買傾向ごとに分類できます。

クラスタ数をどう考えるか

k-meansでは、クラスタ数を事前に指定する必要があります。

クラスタ数を考える方法として、よく使われるのがエルボー法とシルエット係数です。

シルエット係数は、クラスタ内の近さと、他クラスタとの離れ具合を用いて評価する指標です。scikit-learnの説明では、値は1に近いほど良く、0付近はクラスタが重なっている可能性があり、負の値は別のクラスタに近い可能性があるとされています。

ただし、クラスタ数は数値指標だけで機械的に決めるものではありません。

実務では、以下を合わせて考える必要があります。

  • エルボー法で見たときに変化が緩やかになる点
  • シルエット係数の傾向
  • クラスタ別の平均値が解釈しやすいか
  • 営業・販促施策に使える粒度か
  • 現場担当者が説明できる分類か

クラスタ数が多すぎると、解釈が難しくなります。

一方で、少なすぎると、重要な違いを見落とす可能性があります。

そのため、クラスタ数は分析指標と業務解釈の両方で確認することが重要です。

クラスタリング結果をどう解釈するか

クラスタリング後は、クラスタ番号だけを見ても意味はありません。

各クラスタの特徴を確認し、業務上の解釈を付ける必要があります。

例えば、以下のように整理できます。

クラスタ特徴解釈例
0購入金額・頻度が高く、最終購入も近い継続フォローしたい主要顧客
1購入頻度は低いが、購入単価が高い高単価案件の候補
2最終購入から時間が経っている休眠・再アプローチ候補
3少額だが購入頻度がある定期接点を維持したい顧客

このような解釈は、機械的に決まるものではありません。

実際には、営業担当者、販促担当者、経営層と確認しながら、「このグループにどういう意味があるのか」「どの施策につなげるのか」を整理します。

たとえば、休眠顧客候補と判断されたクラスタに対して、すぐに一斉メールを送るのではなく、商品カテゴリ、過去の問い合わせ、契約状況、営業接点などを確認する必要があります。

クラスタリングは施策を自動決定するものではなく、施策を検討するための視点を作る分析です。

実務でクラスタリングを使う際の注意点

クラスタリングを業務データに適用する際は、いくつかの注意点があります。

データ前処理が結果に影響する

欠損値、外れ値、キャンセル取引、重複データ、表記ゆれなどは、クラスタリング結果に影響します。

特に顧客単位で集計する場合、顧客IDが欠損していたり、同じ顧客が複数IDで管理されていたりすると、分類結果の解釈が難しくなります。

クラスタは正解ラベルではない

クラスタリング結果は、あくまで特徴が似ているグループです。

「クラスタ0だから優良顧客」「クラスタ2だから休眠顧客」と自動的に決まるわけではありません。

クラスタ名は、分析後に人が業務文脈で付けるものです。

使用する特徴量によって結果が変わる

RFM指標だけで分類する場合と、商品カテゴリ、地域、問い合わせ履歴、契約期間などを加える場合では、結果が変わります。

どの特徴量を使うかは、分析目的によって決める必要があります。

個人情報・取引情報の扱いに注意する

顧客データや購買履歴を扱う場合は、個人情報、取引情報、社内規程、契約上の制約を確認する必要があります。

分析用データを作る際は、必要に応じて匿名化、アクセス制御、利用目的の整理を行います。

KAMUSHIRUBEで相談できること

SCI総合研究所株式会社では、技術・DX相談サービスとして、KAMUSHIRUBE を提供しています。

クラスタリングは、業務データを似た特徴ごとに整理し、顧客理解や施策検討の入口を作る手法です。

一方で、自社データに適用するには、分析目的、使用する項目、前処理、結果の解釈を整理する必要があります。

KAMUSHIRUBEでは、たとえば以下のような相談が可能です。

  • 自社データでクラスタリングが有効か確認したい
  • どの業務データから分析を始めるべきか相談したい
  • 顧客分類や取引先分類の進め方を整理したい
  • PythonやBIツールを使う前に、分析テーマを壁打ちしたい
  • データ活用の進め方を小さく検討したい

まずは、分析対象となる業務データと、分析によって何を判断したいのかを整理することが重要です。

RASHINRAで支援できること

SCI総合研究所株式会社では、戦略的データ活用・意思決定支援コンサルティングサービスとして、RASHINRA を提供しています。

RASHINRAでは、顧客データ、購買履歴、取引先データ、問い合わせ履歴などを活用して、顧客分類や施策検討に役立つ分析を支援します。

たとえば、以下のような支援が可能です。

  • 業務課題の整理
  • 利用可能データの棚卸し
  • 顧客ID・取引先IDなどの確認
  • 欠損値・外れ値・表記ゆれの確認
  • RFM指標などの特徴量設計
  • クラスタリング・可視化
  • クラスタ別の特徴整理
  • 経営判断や販促施策に使えるレポート化

クラスタリングは、データを分類するだけで完了するものではありません。

分析結果を業務担当者が解釈し、施策や判断につなげられる形に整理することが重要です。

まとめ:クラスタリングは業務データ活用の入口になる

クラスタリングは、正解ラベルがない業務データを、似た特徴を持つグループに分ける分析手法です。

顧客データや購買履歴を使えば、顧客を購入頻度、購入金額、最終購入日などの特徴で分類できます。

特に、RFM指標とk-meansクラスタリングを組み合わせると、DX担当者が業務データ活用の第一歩として試しやすい分析になります。

ただし、クラスタリング結果は正解ではありません。

重要なのは、以下の点です。

  • 何のために分類するのかを明確にする
  • 顧客IDや取引データを整理する
  • 欠損値・外れ値・キャンセル取引を確認する
  • 特徴量を標準化する
  • クラスタ数を数値指標と業務解釈の両方で検討する
  • クラスタ名や施策案は人が業務文脈で考える

顧客データ、購買履歴、取引先データ、問い合わせ履歴などを活用して、顧客分類や施策検討に役立つ分析を行いたい場合は、SCI総合研究所の RASHINRA をご検討ください。

データの棚卸し、前処理、クラスタリング、可視化、レポート化まで、現場の状況に合わせて支援します。

まずは自社データでクラスタリングが有効か、どの業務テーマから始めるべきか相談したい場合は、KAMUSHIRUBE での技術・DX相談もご活用いただけます。

お問い合わせは、お問い合わせフォーム よりご連絡ください。

参考資料

  • Chen, D. 2015. Online Retail [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5BW33.