顧客行動予測 PyTorch

顧客行動予測

PyTorchを使用して顧客行動予測を行うサンプルコードを示します。

ここでは、顧客の過去の購入履歴から次に購入する商品を予測するというシナリオを考えてみましょう。

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

1
2
3
4
5
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt

次に、顧客の購入履歴データを模擬的に作成します。

ここでは、10人の顧客が10種類の商品を購入した履歴をランダムに生成します。

1
2
3
4
np.random.seed(0)
num_customers = 10
num_products = 10
purchase_history = np.random.randint(2, size=(num_customers, num_products))

次に、ニューラルネットワークのモデルを定義します。

ここでは、単純な全結合層のみのネットワークを使用します。

1
2
3
4
5
6
7
8
9
10
11
12
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(num_products, 50)
self.fc2 = nn.Linear(50, num_products)

def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.sigmoid(self.fc2(x))
return x

net = Net()

次に、学習の設定を行います。

損失関数には二値交差エントロピーを、最適化手法にはAdamを使用します。

1
2
criterion = nn.BCELoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)

そして、学習を行います。

ここでは、100エポック学習を行うことにします。

1
2
3
4
5
6
7
8
9
10
11
12
for epoch in range(100):
inputs = torch.from_numpy(purchase_history).float()
targets = torch.from_numpy(purchase_history).float()

optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()

if epoch % 10 == 0:
print(f'Epoch {epoch}, Loss: {loss.item()}')

最後に、学習結果をグラフ化します。

1
2
3
4
5
6
7
8
9
predicted = net(torch.from_numpy(purchase_history).float()).detach().numpy()
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(purchase_history, cmap='binary')
plt.title('Actual')
plt.subplot(1, 2, 2)
plt.imshow(predicted, cmap='binary')
plt.title('Predicted')
plt.show()
[実行結果]

このコードは、顧客の購入履歴を元に次に購入する商品を予測するものです。

ただし、これは非常に単純化された例であり、実際の問題ではより複雑なモデルやデータ前処理が必要になることをご理解ください。

ソースコード解説

コードの詳細を説明します。

1. import 文:

必要なライブラリをインポートします。
torch はPyTorchの主要なライブラリです。
nn はニューラルネットワークを定義するためのサブパッケージ、optim は最適化アルゴリズムを含むサブパッケージ、numpy は数値計算用ライブラリ、matplotlib.pyplot はデータをグラフ化するためのライブラリです。

2. ランダムな顧客の購買履歴データの生成:

np.random.randint(2, size=(num_customers, num_products)) を使用して、0と1のランダムな値で構成されるnum_customers x num_products の行列 purchase_history を生成しています。
これは仮想的なデータであり、各行が各顧客の購買履歴を表しています。

3. ニューラルネットワークモデルの定義:

Net クラスを定義しています。
nn.Module を継承しています。
このモデルは、入力として num_products 個の特徴を受け取り、2つの全結合層 (fc1fc2) を通して処理されます。
fc1 は入力次元から50次元への変換を行い、torch.relu 関数によって活性化されます。
次に、fc2 は50次元から出力次元(num_products)への変換を行い、torch.sigmoid 関数によって0から1の範囲にスケーリングされます。

4. ニューラルネットワークモデルのインスタンス化:

net = Net() を使用して、定義した Net クラスのインスタンス net を作成します。

5. 損失関数と最適化アルゴリズムの定義:

この例では、損失関数に二値交差エントロピー(BCELoss)を使用しています。
最適化アルゴリズムにはAdamを使用しています。
学習率は0.001です。

6. モデルの訓練:

データをPyTorchのTensorに変換し、100エポックの間でモデルを訓練しています。
各エポックで、最適化アルゴリズムによって損失が最小化されるようにモデルの重みを更新しています。

7. 予測と結果のグラフ化:

訓練が終了した後、学習済みのモデルを使って購買履歴データを入力として予測を行い、predicted という変数に予測結果を格納しています。
そして、元の購買履歴データと予測結果を2つのサブプロットを持つグラフとして表示しています。

上記のコードは非常にシンプルな顧客行動予測の例ですが、実際の問題にはさらなるデータの前処理やモデルの改善が必要になることがあります。