マーケティングをやっていると、ユーザー、商品、ウェブページ、キーワードなど、色々なデータの分類をすることがしょっちゅうあります。
機械学習は分類をするための手法が色々あります。今回は、Pythonの勉強がてら、ランダムフォレストを使って、売れ筋商品を分類できるかを試してみます。
ランダムフォレストとは
樹木モデルを複数作成し、複数の中から多数決で結果を決めることで、精度の高い予測や分類を行う方法です。
ランダムフォレストについてのわかりやすい説明がこちらのスライドで紹介されています。
価格コムのノートパソコンのデータ
今回は、価格コムのノートパソコンのデータを活用してみました。
価格コムのノートパソコンのランキングページから、売れ筋順位、レビュー評価の点数と件数、口コミ件数を1位から560位までを取得しました。
価格コムのノートパソコンランキング
今回は学習に使いたいだけだったので、560レコードだけにしましたが、本格的に分析したい場合は、より多くのレコードが必要だと思います。
データをファイルに取り込む
取得したデータをcsvファイルで保存し、Pythonのプログラムで読み込みます。
今回は、1〜100位に対してlabelという変数をhigh、101位以下をlabelをlowとしました。scoreはレビューの点数、num_of_scoreはレビューの件数、reviewは口コミ件数を表す変数です。
from sklearn.ensemble import RandomForestClassifier from sklearn import cross_validation, metrics import pandas as pd tbl = pd.read_csv("kakaku.csv") label = tbl["label"] data = tbl[["score", "num_of_score", "review"]]
ランダムフォレストで学習させる
続いて、読み込んだデータを使って、ランダムフォレストを使って学習させます。また正解率も計算します。
data_train, data_test, label_train, label_test = cross_validation.train_test_split(data, label) # ランダムフォレストを使った学習 clf = RandomForestClassifier() clf.fit(data_train, label_train) # 予測 predict = clf.predict(data_test) # 正解率の確認 ac_score = metrics.accuracy_score(label_test, predict) cl_report = metrics.classification_report(label_test, predict) print("正解率=" , ac_score) print("レポート=\n", cl_report)
結果
正解率は、約63% でした。適合率(precision)、再現率(recall)、F値(f1-score)ともに、high(100位内)の判定がうまくできていないようです。データが少なすぎましたかね。
正解率= 0.6333333333333333 レポート= precision recall f1-score support high 0.35 0.44 0.39 16 low 0.78 0.70 0.74 44 avg / total 0.66 0.63 0.64 60
ランダムフォレストの使い方はわかったので、アクセス解析データを使って、コンバージョン貢献度の高いページの分類などに使ってみようと思います。
参考書籍
今回の記事は、Pythonによるスクレイピング&機械学習という本を参考にしています。とても良い本です。