■食べログのpythonスクレイピングと分析 #11 ランダムフォレストによる回帰分析

スポンサーリンク
tech系(python)
スポンサーリンク

はじめに

前回は食べログの項目に関して可視化を行いました。

前回も記載しましたが評価値については食べログのページに「その時点でユーザーからの評価がどのくらい集まっているのかという見方を示す指標で、お店や料理について絶対的・確定的な優劣を示すものではありません。」と記載してあり、私も衝撃を受けました。

しかし、私はあきらめていませんでした。

可視化した際にも評価値が高くなりがちな項目が幾つかあったので、それらを変数にして回帰をすればなんかしら指標を決定づける要因がわかるんじゃないかって。

てことで、今回は回帰分析をやっていきたいと思います。

ランダムフォレストを使って。

使用するデータは東京にあるレストラン、約14万件。(前回と一緒)

ランダムフォレストによる回帰

suumoの家賃をランダムフォレストを使って分析した際と同様のコードを書いていきます。

suumoの家賃をランダムフォレストで分析した記事はこちら

今回はランチとディナーで分けてみました。

理由としてはディナーだけのお店もあったりするからです。

ランチ

説明変数は以下です。

受賞アワードの数、東京のエリア(区や市)、ランチの価格帯、アワード、ジャンル、「空間・設備」、「利用シーン」、「飲み物」、「食べ物」

回帰の際のコードは以下のような感じで、(参考程度にしてください)

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error as MSE
import numpy as np
from sklearn.ensemble import RandomForestRegressor

frf = RandomForestRegressor()
X_train, X_test, y_train, y_test = train_test_split(lunch_train_data, y_data, test_size=0.2, random_state=1, shuffle=True)

frf.fit(X_train, y_train)
y_pred_train = frf.predict(X_train)
rsme_train = np.sqrt(MSE(y_train, y_pred_train))
print(rsme_train)

y_pred_test = frf.predict(X_test)
rsme_test = np.sqrt(MSE(y_test, y_pred_test))
print(rsme_test)

実行結果は以下です。

0.05543106695342894
0.12260458899754725

学習データに対する回帰への評価(RMSEの値)は0.05なので割と良くできているようには見えますが、

テストデータの評価(RMSEの値)は0.1ほどです。

食べログの評価値が5段階評価なので0.1ほどであればよさげには見えますが、

学習データの結果(RMSE値の値)と比べると過学習しているようにも見えます。

過学習気味なのでグリッドサーチをしようとしましたが、鬼のように時間がかかってしまい、終わらないため断念しました。

テストデータの実際の評価値とテストデータの予測値をプロットしてみます。

つまり上記コードのy_testとy_pred_testをプロットするとどうなるかというと以下のようになります。

評価値が3.6より下あたりの予測が結構ブレていますね。

重要度

続いて重要度も記載しておきます。

受賞アワードの数 :  0.16249697611484515
ランチの価格帯 :  0.039767235094965395
デート(利用シーン) :  0.009362529554135498
家族・子供と(利用シーン) :  0.00927206372323509
オシャレな空間(空間・設備) :  0.00924186925183577
東京のエリア_新宿区 :  0.009133278772834033
東京のエリア_中央区 :  0.008801078866482622
東京のエリア_渋谷区 :  0.008381953054792179
東京のエリア_千代田区 :  0.008256835670418386
東京のエリア_世田谷区 :  0.007695653484133357
東京のエリア_港区 :  0.00715940678240202
東京のエリア_台東区 :  0.0068204066382093875
東京のエリア_目黒区 :  0.00619901447907379
日本酒あり(飲み物) :  0.0054901393473163335
野菜料理にこだわる(食べ物) :  0.0049418729309942035
カクテルあり(飲み物) :  0.004720594215755031
東京のエリア_豊島区 :  0.004338298693177134
焼酎あり(飲み物) :  0.004298162593644763
東京のエリア_練馬区 :  0.0038314825064096427
東京のエリア_品川区 :  0.0037966695706905416

ディナー

ディナーもランチと同様に見ていきます。

コードはランチの時と一緒ですので割愛します。

ランチの時と違うのは、説明変数が、ランチの金額でなく、ディナーの金額になっているところです。

結果としては以下です。

0.030806462720824455 👈学習データへの回帰に対するRMSE
0.07721604145259992 👈テストデータへの回帰に対するRMSE

こちらも一旦グリッドサーチは時間がかかるので断念。

ディナーの方もテストデータの実際の評価値とテストデータの予測値をプロットしてみます。

こちらもランチと同様に評価値が3.6より下あたりの予測が結構ブレていますね。

重要度

続いて重要度。

受賞アワードの数 :  0.17635770524719518
ディナーの価格帯 :  0.08151763153166824
東京のエリア_新宿区 :  0.010565486917498606
オシャレな空間(空間・設備) :  0.010427621852225833
東京のエリア_渋谷区 :  0.008527283892203918
東京のエリア_中央区 :  0.008335894338795835
カクテルあり(飲み物) :  0.007974891323699797
東京のエリア_千代田区 :  0.007970769866860065
東京のエリア_港区 :  0.00764077531561696
デート(利用シーン) :  0.007312339205030982
東京のエリア_世田谷区 :  0.007268455874483888
家族・子供と(利用シーン) :  0.007262653126841488
東京のエリア_台東区 :  0.006728605470091045
東京のエリア_目黒区 :  0.0065003396953121325
野菜料理にこだわる(料理) :  0.005319561436981211
日本酒あり(飲み物) :  0.005244951490716626
東京のエリア_豊島区 :  0.004807170582536193
居酒屋(ジャンル) :  0.004025021292179151
焼酎あり(飲み物) :  0.003808877196627767
ワインあり(飲み物) :  0.003611337597088606

まとめ

まとめです。

今回は食べログの東京のレストランデータ14万件を基にランダムフォレストで回帰分析を行いました。

精度としてはあまりいいものではない結果に終わりました。

また評価値を決定づける説明変数の重要度をもとめたところ、「受賞アワードの数」が大きく影響していました。

やはり、この評価値は絶対的・確定的な優劣を示すものではないのかもしれないですね。

絶対的・確定的な優劣を示すものではないのかもしれないということを証明できましたね(笑)

今回はここまで。ではまた。👋👋👋


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