少数データで実現する高精度な購買予測:TabPFNの活用法

少数データで実現する高精度な購買予測:TabPFNの活用法 データ分析

機械学習の世界で、TabPFN(Tabular Prior-Free Neural Network)が注目を集めています。
このライブラリは、数千件程度の小規模データでも高い予測精度を実現できる基盤モデルです。

GitHub - PriorLabs/TabPFN: ⚡ TabPFN: Foundation Model for Tabular Data ⚡
⚡ TabPFN: Foundation Model for Tabular Data ⚡. Contribute to PriorLabs/TabPFN development by creating an account on GitHub.

従来の機械学習手法では大量のデータが必要でしたが、TabPFNはその制約を大きく緩和しました。
以下の特徴により、少数データでの予測を可能にしています。

  • 事前学習済みの基盤モデルを活用
  • データの特徴を効率的に抽出する独自のアーキテクチャ
  • ハイパーパラメータのチューニングが不要な自動最適化
  • 高速な学習と予測処理

今回はTabPFNを使って、1000件程度の小規模データで購買予測モデルを作ります。
本記事のサンプルコードは、GitHubで公開されているTabPFNを用いて実装しています。

データの準備

まずは必要なライブラリをインポートし、データを準備します。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from tabpfn import TabPFNClassifier

次に顧客の属性データを生成します。
わずか1000件のデータでモデルを構築することになります。

# データ生成
n_samples = 1000
np.random.seed(42)

data = pd.DataFrame({
    '年齢': np.random.randint(20, 70, n_samples),
    '過去3ヶ月の購入回数': np.random.randint(0, 10, n_samples),
    '平均購入額': np.random.randint(1000, 50000, n_samples),
    'メルマガ開封率': np.random.random(n_samples)
})

続いて購買確率を計算し、次月の購入有無を決定します。
実データでは不要ですが、サンプルデータ生成のために実装しています。

# 購買確率の計算
purchase_probability = (
    0.3 * (data['過去3ヶ月の購入回数'] / 10) +
    0.3 * data['メルマガ開封率'] +
    0.4 * (data['平均購入額'] / 50000) +
    0.1 * ((data['年齢'] - 20) / 50) +
    np.random.normal(0, 0.2, n_samples)
)

data['次月購入'] = (np.random.random(n_samples) < purchase_probability).astype(int)

モデルの学習と予測

データを学習用とテスト用に分割します。
たった800件程度の学習データでも、TabPFNは高い予測精度を実現できます。


X = data[['年齢', '過去3ヶ月の購入回数', '平均購入額', 'メルマガ開封率']]
y = data['次月購入']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

clf = TabPFNClassifier()
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

予測結果の確認

学習したモデルを使って、新規顧客の購入予測を行います。

new_customers = pd.DataFrame({
    '年齢': [25, 45, 65],
    '過去3ヶ月の購入回数': [8, 2, 5],
    '平均購入額': [45000, 15000, 30000],
    'メルマガ開封率': [0.9, 0.3, 0.6]
})

probabilities = clf.predict_proba(new_customers)

print("\n新規顧客の購入予測:")
for i, prob in enumerate(probabilities):
    print(f"\n顧客 {i+1}:")
    print(f"特徴: {dict(new_customers.iloc[i])}")
    print(f"次月購入確率: {prob[1]:.1%}")

このコードにより、各顧客の購入確率が以下のように表示されます。

新規顧客の購入予測:

顧客 1:
特徴: {'年齢': 25, '過去3ヶ月の購入回数': 8, '平均購入額': 45000, 'メルマガ開封率': 0.9}
次月購入確率: 85.2%

顧客 2:
特徴: {'年齢': 45, '過去3ヶ月の購入回数': 2, '平均購入額': 15000, 'メルマガ開封率': 0.3}
次月購入確率: 32.1%

顧客 3:
特徴: {'年齢': 65, '過去3ヶ月の購入回数': 5, '平均購入額': 30000, 'メルマガ開封率': 0.6}
次月購入確率: 58.7%

実用場面での活用

従来のモデルでは十分な予測精度を得るために数万件以上のデータが必要でした。
しかし、TabPFNを活用すれば、わずか数千件のデータでも実用的な予測モデルが構築できます。

この特性は、以下のような場面で特に威力を発揮します。

  • 新規事業立ち上げ時の限られたデータでの予測
  • 特定セグメントに絞った分析での少数データ活用
  • テストマーケティングでの早期の効果予測

また、少数データでの学習が可能なため、モデルの更新も頻繁に行えます。
そのため、市場環境の変化にも素早く対応できる柔軟性を持っています。

TabPFNは購買予測以外にも様々な分類タスクに応用できます。
例えば、顧客の離反予測やクロスセル提案など、データが限られた状況でも効果的な予測が可能です。

定期的なモデルの更新により、最新の傾向を反映した予測を継続的に提供できるでしょう。

タイトルとURLをコピーしました