Python における E コマース顧客データの RFM アプローチと K-Means クラスタリングの実践

顧客価値分析の目的と意義

EC 業界におけるデータ活用の核心は、顧客行動を定量的に評価し、戦略的な意思決定を行うことにあります。具体的には、顧客の購買履歴や頻度、購入金額といった要素を組み合わせることで、企業としての収益創出に寄与する顧客層を明確化します。

  • 行動パターンの解明: 過去の取引データを基に、リピーター、新規、休眠など、異なるカテゴリーに分類し、ユーザープロファイルの精度を高めます。
  • ターゲットマーケティング: 高価値顧客に対して特別な施策を講じることで、ライフタイムバリュー(LTV)の最大化を図ります。
  • リソース最適化: 限られたマーケティング予算を効果的に配分し、投資対効果(ROI)を向上させます。

可視化と特徴量エンジニアリング

K-Means クラスタリングアルゴリズムを導入する前に、データセットの特性を把握する必要があります。RFM 分析(Recency, Frequency, Monetary)が重要な指標となります。これにより、直近の購買日、購買回数、総購入額の分布を数値的に表現します。

データ前処理と概要確認

まず、Excel ファイルからデータをロードし、構造を確認します。ここではサンプルサイズを確認しつつ、特定の列を対象とした操作を行います。

import pandas as pd

# データセットの読み込み
file_path = 'ebay_sales_record.xlsx'
orders = pd.read_excel(file_path)

# 全体の行数と先頭データの確認
sample_count = len(orders)
preview_df = orders.head(30)
print(preview_df)

決済額のカウント分布

支払い実績のばらつきを理解するため、訓練データセットとテストデータセットそれぞれで金額分布を描画します。この過程で、外れ値が存在するか否かを判断材料とします。

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(12, 6))
ax.hist(orders['payment_amount'], bins=50, alpha=0.6, label='全体')
ax.set_xlabel('購入金額')
ax.set_ylabel('出現頻度')
ax.legend()
ax.set_title('注文単価の分布状況')
plt.show()

モデル構築への展開

最終的には、顧客をグループ分けし、それぞれの属性に基づいた予測モデルを構築することを目標とします。ここでサポートベクターマシン(SVM)を用いたクラス分類の考え方も併せて検証可能です。

モデル設計と学習プロセス

機械学習のパイプラインを確立するために、特徴量と目標変数を定義し、データを分割する必要があります。

特徴量の選択

入力とする変数としては、顧客の消費活動に関連する項目を選び出します。また、出力ラベルには顧客ステータスやカテゴリを設定します。

# 対象列の特定
target_col = 'user_segment'
input_cols = ['recency', 'frequency', 'monetary']

# 説明変数と目的変数の分離
X = orders[input_cols]
y = orders[target_col]

学習データの切り出し

汎化性能を評価するため、データセットを学習用と検証用に比率を決めて分割します。

from sklearn.model_selection import train_test_split

train_X, test_X, train_y, test_y = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=100
)

SVM による分類器の訓練

線形核関数を用いた SVC(Support Vector Classifier)を作成し、準備されたデータセット上で学習を実行します。

from sklearn.svm import SVC

classifier = SVC(kernel='linear', C=1.0, random_state=42)
classifier.fit(train_X, train_y)

評価指標とクラスタリング結果の解析

モデルの成否を客観的に判断するための基準を設定し、その結果を解釈します。特に混同行列は誤分類の内訳を可視化するのに有効です。

混同行列とスコア算出

予測結果と実際のラベルを比較し、正確率や再現率などのメトリクスを計算します。

from sklearn.metrics import classification_report, confusion_matrix

pred_labels = classifier.predict(test_X)

# 混同行列の表示
cm = confusion_matrix(test_y, pred_labels)
print("混淆矩阵:")
print(cm)

# パフォーマンスレポート
report = classification_report(test_y, pred_labels)
print(report)

K-Means による顧客セグメンテーション

RFM の各項目において、類似性を持つ顧客群を自動的にグループ化します。scikit-learn に用意された KMeans モデルを利用することで、データ内の自然な境界線を発見できます。

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=0)
cluster_labels = kmeans.fit_predict(X)

# 各簇の統計情報を取得
cluster_summary = orders.copy()
cluster_summary['Group_ID'] = cluster_labels
group_stats = cluster_summary.groupby('Group_ID').agg(['mean', 'count'])
print(group_stats)

多変量データの可視化

Seaborn ライブラリを使用したペアプロットにより、複数の変数間でのクラスター間の乖離を視覚的に確認します。これにより、どの変数が区別力を生んでいるかが理解しやすくなります。

import seaborn as sns

pair_plot = sns.pairplot(
    cluster_summary, 
    hue='Group_ID', 
    vars=['R_score', 'F_score', 'M_score'], 
    diag_kind='hist'
)
pair_plot.savefig('segment_distribution.png')

タグ: Python machine learning K-Means RFM Analysis E-Commerce Data

7月11日 00:12 投稿