【初心者が】ECでの商品閲覧履歴、販売履歴をもとに、見込み顧客の抽出を実施してみました。

EC企業でWebマーケターとして勤務をしております。
商品を購入した、していないの区分けだけでなく、見込み客を特定することができれば、より効率的に広告などを実施することができるのではと考え、Pythonの機械学習で実装してみました。

私の環境
・Python3
・Jupyter Notebook 
・Windows PC 

■私のレベル
・学習開始してから2か月半程度。

■データ前処理
データを読み込んだのちに特定のカラムに記号が多数入っており、Light GBMで読み込みができなかったため、前処理段階で記号をリプレイス。
データの詳細の記載は控えるものの、どのようなカテゴリを閲覧したか、どのような経路からサイトに訪問したか、どのデバイスで閲覧したかを特徴量として入力。

 #記号をリプレイス 
df_session['category']=df_session['category_desc'].replace([',','-','&','/',';','ー','・','\.','',"'"],'',regex=True)ー','','\.','',"'"],'',regex=True)    

■データ分割
ホールドアウト法でデータを分割。

 #ホールドアウト法で分割 X_train,X_test,y_train,y_test = train_test_split(df_x,df_y,test_size=0.3,random_state=42)

■モデル実装
GridSearchでのハイパーパラメータをチューニングの後に、Kaggleでよく使われているというLightGBMでモデルを実装し、スコアを検証。0.84程度までスコアが改善し、一旦は実用に耐えうるレベルと判断。

lgb_train = lgb.Dataset(X_train,y_train)

lgb_test = lgb.Dataset(X_test,y_test,reference=lgb_train)
 #fin_paramsに最終パラメータを入れていく

fin_params ={"objective":["binary"],

        "metric": ["auc"],

        "learning_rate":[0.01]}

lgb_model = lgb.train(fin_params,lgb_train,valid_sets = lgb_test,num_boost_round=1000,verbose_eval=5,early_stopping_rounds=10)

y_pred =lgb_model.predict(X_test,num_iteration=lgb_model.best_iteration)

fpr,tpr,threshold = metrics.roc_curve(y_test,y_pred)

auc = metrics.auc(fpr,tpr)

print(auc)

■重要度分析
どのデータが購入に影響しているかを図るために重要度分析を実施。こちらの分析によって、どの要素が購入に寄与しているかを特定することができた。

 #重要度分析 

importance = pd.DataFrame(lgb_model.feature_importance(importance_type='gain'), index=df_x.columns, columns=['importance'])

print(importance.sort_values('importance',ascending=False))

importance.to_csv('tmp/importance.csv')

■将来データの予測
別途用意していた教師なしデータ向けの予測を実施。

 #Future  dataのもmodel実装とCSV出力

y_future_pred =lgb_model.predict(df_drfucust,num_iteration=lgb_model.best_iteration,predict_disable_shape_check='true')

df_results = df_drfucust[['cd']] 

df_results['y_future_pred'] = y_future_pred 

■まとめ
・顧客IDごとに購入確率を抽出することができ、実際の購買データと照らしてみたところ、データの平均確率以上に8割のデータが集中し、また確率が高い方が顧客数に対する購買の比率が高かったため、私が予測するよりもはるかに高い精度で予測ができている結果となった。
・多分にチューターの方の手助けを借りたため、実装が出来たものの、色々と試行錯誤する中で、実用で活用することができるものを作れたのはとてもうれしい限りです。


この記事が気に入ったらサポートをしてみませんか?