機械学習で顧客の購買行動を予測する方法:実装から精度向上まで徹底解説

 

はじめに

現代のビジネスにおいて、「この顧客は商品を購入するか?」という予測は企業の売上に直結する重要な課題です。機械学習を活用することで、顧客の行動履歴や属性データから購買確率を予測し、効率的なマーケティング戦略を立案できます。

本記事では、顧客の購買予測を行う機械学習モデルの構築方法を、初心者にも分かりやすく解説します。

顧客購買予測とは

顧客購買予測とは、過去の顧客データを基に機械学習アルゴリズムを使用して、特定の顧客が将来商品を購入する確率を算出する手法です。この技術により、以下のメリットが得られます:

  • マーケティング効率の向上:購買可能性の高い顧客に集中してアプローチ
  • コスト削減:無駄な広告費用の削減
  • 顧客体験の向上:個々の顧客に適したタイミングでの提案
  • 売上の最大化:確度の高い見込み客への重点的なセールス

必要なデータと特徴量

基本的な顧客データ

  • 年齢、性別、居住地域
  • 過去の購買履歴
  • サイト滞在時間、閲覧ページ数
  • メール開封率、クリック率

行動データ

  • 商品ページの閲覧回数
  • カート追加後の離脱率
  • レビューの閲覧有無
  • 価格比較の頻度

実装手順

1. データの準備と前処理

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# サンプルデータの作成
data = pd.DataFrame({
    'age': [25, 35, 45, 30, 28],
    'income': [3000000, 5000000, 7000000, 4000000, 3500000],
    'page_views': [10, 25, 5, 15, 20],
    'cart_adds': [2, 5, 1, 3, 4],
    'purchased': [0, 1, 0, 1, 1]
})

# 特徴量とターゲットの分離
X = data.drop('purchased', axis=1)
y = data['purchased']

# データの分割
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

2. 機械学習モデルの構築

from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# ランダムフォレストモデル
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# ロジスティック回帰モデル
lr_model = LogisticRegression()
lr_model.fit(X_train, y_train)

# 予測実行
rf_pred = rf_model.predict(X_test)
lr_pred = lr_model.predict(X_test)

3. モデルの評価

from sklearn.metrics import confusion_matrix, roc_auc_score

# 精度の評価
rf_accuracy = accuracy_score(y_test, rf_pred)
lr_accuracy = accuracy_score(y_test, lr_pred)

print(f"Random Forest精度: {rf_accuracy:.3f}")
print(f"Logistic Regression精度: {lr_accuracy:.3f}")

# 購買確率の取得
purchase_prob = rf_model.predict_proba(X_test)[:, 1]
print(f"購買確率: {purchase_prob}")

主要なアルゴリズムの特徴

ロジスティック回帰

  • メリット:解釈しやすく、高速
  • デメリット:非線形関係を捉えにくい
  • 適用場面:シンプルなデータセット、説明可能性が重要な場合

ランダムフォレスト

  • メリット:高精度、過学習に強い
  • デメリット:計算コストが高い
  • 適用場面:複雑なデータ、特徴量が多い場合

勾配ブースティング(XGBoost)

import xgboost as xgb

# XGBoostモデル
xgb_model = xgb.XGBClassifier(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=3
)
xgb_model.fit(X_train, y_train)
xgb_pred = xgb_model.predict_proba(X_test)[:, 1]

特徴量エンジニアリング

新しい特徴量の作成

# 行動パターンの特徴量
data['conversion_rate'] = data['cart_adds'] / data['page_views']
data['engagement_score'] = data['page_views'] * data['cart_adds']

# カテゴリカル変数のエンコーディング
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['gender_encoded'] = le.fit_transform(data['gender'])

モデルの精度向上テクニック

1. ハイパーパラメータチューニング

from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [3, 5, 7],
    'min_samples_split': [2, 5, 10]
}

grid_search = GridSearchCV(
    RandomForestClassifier(),
    param_grid,
    cv=5,
    scoring='accuracy'
)
grid_search.fit(X_train, y_train)

2. アンサンブル学習

from sklearn.ensemble import VotingClassifier

# 複数モデルの組み合わせ
ensemble = VotingClassifier([
    ('rf', RandomForestClassifier()),
    ('lr', LogisticRegression()),
    ('xgb', xgb.XGBClassifier())
], voting='soft')

ensemble.fit(X_train, y_train)

実装時の注意点

データの不均衡問題

顧客購買データは「購入しない」ケースが多く、クラス不均衡が発生しがちです。

from imblearn.over_sampling import SMOTE

# SMOTEによるオーバーサンプリング
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

時系列を考慮した検証

購買行動には時系列の要素があるため、適切な検証方法を選択する必要があります。

from sklearn.model_selection import TimeSeriesSplit

# 時系列クロスバリデーション
tscv = TimeSeriesSplit(n_splits=5)
scores = cross_val_score(model, X, y, cv=tscv)

実際のビジネス活用例

1. Eコマースサイト

  • 商品レコメンドシステムとの連携
  • カート放棄メールの自動送信
  • 動的価格設定への活用

2. 小売店

  • 店舗在庫最適化
  • 個別プロモーション配信
  • 来店予測との組み合わせ

パフォーマンス指標の選択

顧客購買予測では、以下の指標が重要です:

from sklearn.metrics import precision_recall_curve, roc_curve

# 精度と再現率の曲線
precision, recall, _ = precision_recall_curve(y_test, purchase_prob)

# ROC曲線
fpr, tpr, _ = roc_curve(y_test, purchase_prob)

# AUCスコア
auc_score = roc_auc_score(y_test, purchase_prob)
print(f"AUC Score: {auc_score:.3f}")

まとめ

顧客の購買予測は、適切なデータ準備とアルゴリズム選択により高精度なモデル構築が可能です。重要なポイントは:

  1. 質の高いデータ収集:顧客の行動を多角的に捉える
  2. 適切な前処理:欠損値処理やスケーリングの実施
  3. アルゴリズム選択:データの特性に応じた手法の選択
  4. 継続的な改善:新しいデータでのモデル更新

機械学習による顧客購買予測は、データドリブンな意思決定を支援し、ビジネス成果の向上に直結します。まずは小規模なデータセットから始めて、徐々にモデルの精度を向上させていくことをお勧めします。

■テックジム「AIエンジニア養成コース」

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<オンライン無料>ゼロから始めるPython爆速講座