はじめに
前回、精度が大幅に良くなりました。
今回はその結果を使用してコスパの良さげなパラメータが何なのかを調べてみます。
具体的には「予測された評価値(★の値)よりも実際の評価値(★の値)が高いレストランのパラメータはどうなっているのか」を確認していきます。
つまり、予測よりも高い評価を持つお店こそパフォーマンスの高いお店であり、そのお店たちにはどんな傾向があるのかを確認するのが今回の記事の趣旨になります。
この記事でわかること
コスパの良いレストランの値はどうなっているか
今回使用するデータについて
今回使用するデータは北海道の食べログに載っていたレストランですが、データ数はランチが16563件、ディナーが13590件です。
実際は3万件以上あるのですが、ブックマーク数とレビューコメント数が載っていないお店を除くとこの件数になります。
ですので、まだ実はおいしいお店があるのかもしれないですが、精度が高い状態で分析をしたいので、このデータ数で分析を行います。
「実際の値 – 予測値」が高い値
まず「実際の値 – 予測値」が高い値がどれくらいのものなのかを求めてみます。
とりあえず、ベスト10を求めます。
0.302 0.223 0.213 0.21 0.178 0.175 0.167 0.167 0.159 0.154
(ベスト30を求めるpythonコードはこちらで記載したものとほぼ同じなので参考にしてみてください)
大きいものだと0.3程離れていますね。
予測値よりも0.3程評価が高いお店となります。
各パラメータを分析
では実際に分析をしていきます。
分析方法について
今回、分析対象となるパラメータは以下です。
- 「料理」
- 「ドリンク」
- 「空間・設備」
- 「利用シーン」
- 「受賞アワード」
- 「ジャンル」
これらのパラメータに対して「実際の値 – 予測値」が高い値ベスト100を求めます。
それぞれに含まれている数が全体(ブックマーク数とレビューコメント数があるもの)の割合の何パーセント含まれているかで順位付けをします。
これは実際の値がその全体の中では多く占めているものが結果的にベスト100に多く含まれてしまうことを避けるためです。(正規化のようなことをするということですね。)
(ちょっと説明が分かりにくいかもなので、実際に以下でやってみながら説明も記載していきます。)
ランチとディナーに分けて行います。
それでは分析していきましょう。
ランチ

「料理」
「料理」のところだけ丁寧に説明します。
「料理」の値のベスト100は以下のような値になっています。
[] 71 [魚料理にこだわる] 9 [野菜料理にこだわる, 魚料理にこだわる] 7 [野菜料理にこだわる] 3 [英語メニューあり] 2 [野菜料理にこだわる, 魚料理にこだわる, 英語メニューあり] 2 [野菜料理にこだわる, 魚料理にこだわる, 朝食・モーニングあり] 1 [野菜料理にこだわる, 健康・美容メニューあり] 1 [野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり] 1 [野菜料理にこだわる, 健康・美容メニューあり, ベジタリアンメニューあり] 1 [健康・美容メニューあり] 1 [野菜料理にこだわる, 魚料理にこだわる, 健康・美容メニューあり] 1
コスパの良いお店ベスト100の内、値が入っていないお店は71件あるということですね。
残りは、上記のリストの通りです。
複数の「料理」の項目があるお店もありますね。
では実際に全体の割合に対するベスト100の中でどれが割合として大きいかベスト10を求めてみます。
以下のようになりました。
Value Ratio
朝食・モーニングあり 0.017391
魚料理にこだわる 0.013877
野菜料理にこだわる 0.012884
ベジタリアンメニューあり 0.008065
英語メニューあり 0.007767
アレルギー表示あり 0.007463
健康・美容メニューあり 0.006289
カロリー表示あり 0.000000
デザート食べ放題あり 0.000000
ちなみに、割合じゃなくて個数での順位が以下です。
魚料理にこだわる 16 野菜料理にこだわる 13 英語メニューあり 4 朝食・モーニングあり 4 健康・美容メニューあり 3 ベジタリアンメニューあり 2 アレルギー表示あり 1
これからわかる通り、個数と割合の順位が等しくなるとは限りません。
単純に「魚料理にこだわる」の全体に占める割合が多ければそれに引っ張られて順位が高くなってしまいます。(北海道だから「魚料理にこだわる」お店が多いのも納得がいきます。)
ということで割合で順位を求めています。
以下で求めている項目についても同様に割合で求めていきます。
また、一応、値を求めたコードも載せておきます。
以前もコスパの良いベスト100の割合を求めるというのはコードにしていますが、この時は要素がリストではなかったので、今回は少し複雑です。
import pandas as pd
from collections import Counter
# 要素ごとに値の出現回数をカウント
counter_a = Counter(val for sublist in kouhyouka_best_100['dish'] for val in sublist)
counter_b = Counter(val for sublist in restaurant_train_data['dish'] for val in sublist)
# 値ごとの比率を計算してDataFrameに格納
ratios = {}
for value in set(counter_a.keys()).union(counter_b.keys()):
ratio = counter_a.get(value, 0) / counter_b.get(value, 1)
#print(ratio)
if isinstance(value, list):
for sub_value in value:
ratios[sub_value] = ratio
else:
ratios[value] = ratio
keys = list(ratios.keys())
values = list(ratios.values())
ratios_df = pd.DataFrame({'Value': keys, 'Ratio': values})
# 比率でランキングを計算して表示
ranked_ratios = ratios_df.sort_values(by='Ratio', ascending=False)
print(ranked_ratios)kouhyouka_best_100はコスパのよいお店ベスト100のdataframe、
restaurant_train_dataは全部のレストランのデータdataframe
です。
‘dish’は「料理」のデータが入ったカラムを示しています。
「ドリンク」
ここから以下は、データをポンポンと載せていきます。
ランチの「ドリンク」は以下。
Value Ratio
ワインにこだわる 0.025276
日本酒にこだわる 0.017408
ワインあり 0.010235
カクテルあり 0.009447
日本酒あり 0.007407
焼酎あり 0.007001
焼酎にこだわる 0.006494
カクテルにこだわる 0.005587
「空間・設備」
Value Ratio
バリアフリー 0.012676
車椅子で入店可 0.012146
席が広い 0.011280
掘りごたつあり 0.010435
オシャレな空間 0.010273
電源あり 0.008016
無料Wi-Fiあり 0.007671
落ち着いた空間 0.007650
カウンター席あり 0.006324
ソファー席あり 0.003854
「利用シーン」
Value Ratio
デート 0.041096
接待 0.036364
家族・子供と 0.007900
知人・友人と 0.005112
一人で入りやすい 0.005040
女子会 0.000000
大人数の宴会 0.000000
合コン 0.000000
「受賞アワード」
The Tabelog Award 2022 Silver 受賞店 1.000000
The Tabelog Award 2023 Silver 受賞店 1.000000
The Tabelog Award 2022 Bronze 受賞店 0.500000
The Tabelog Award 2019 Bronze 受賞店 0.500000
The Tabelog Award 2021 Silver 受賞店 0.500000
The Tabelog Award 2023 Bronze 受賞店 0.400000
食べログ 日本料理 EAST 百名店 2023 選出店 0.333333
The Tabelog Award 2021 Bronze 受賞店 0.333333
食べログ 日本料理 EAST 百名店 2021 選出店 0.333333
食べログ イタリアン EAST 百名店 2021 選出店 0.285714
「The Tabelog Award 2022 Silver 受賞店」と「The Tabelog Award 2023 Silver 受賞店」は確実にコスパの良いお店として入っていますね。
母数が少なければこういうことも起きますね。
「ジャンル」
Value Ratio
タコス 1.000000
メキシコ料理 0.250000
イノベーティブ 0.166667
オーベルジュ 0.105263
ビアガーデン 0.090909
串焼き 0.083333
ろばた焼き 0.047619
惣菜・デリ 0.040000
タイ料理 0.040000
スペイン料理 0.034483
ディナー

「料理」
Value Ratio
野菜料理にこだわる 0.017115
ベジタリアンメニューあり 0.016598
健康・美容メニューあり 0.014768
魚料理にこだわる 0.013896
英語メニューあり 0.008982
朝食・モーニングあり 0.004630
カロリー表示あり 0.000000
デザート食べ放題あり 0.000000
アレルギー表示あり 0.000000
「ドリンク」
Value Ratio
ワインにこだわる 0.019946
日本酒にこだわる 0.013049
カクテルにこだわる 0.011928
ワインあり 0.010608
焼酎にこだわる 0.009000
焼酎あり 0.007833
日本酒あり 0.007794
カクテルあり 0.007549
「空間・設備」
Value Ratio
電源あり 0.012821
オシャレな空間 0.012014
落ち着いた空間 0.010733
ライブ・生演奏あり 0.009901
スポーツ観戦可 0.009554
車椅子で入店可 0.008696
席が広い 0.008008
カウンター席あり 0.007928
無料Wi-Fiあり 0.007752
カップルシートあり 0.006369
「利用シーン」
Value Ratio
デート 0.037190
女子会 0.013333
接待 0.008811
知人・友人と 0.006329
家族・子供と 0.005665
一人で入りやすい 0.005510
大人数の宴会 0.005181
合コン 0.000000
「受賞アワード」
Value Ratio The Tabelog Award 2018 Gold 受賞店 1.000000 The Tabelog Award 2021 Gold 受賞店 1.000000 The Tabelog Award 2022 Gold 受賞店 1.000000 The Tabelog Award 2020 Silver 受賞店 1.000000 The Tabelog Award 2019 Gold 受賞店 1.000000 The Tabelog Award 2017 Silver 受賞店 0.500000 The Tabelog Award 2023 Silver 受賞店 0.500000 The Tabelog Award 2021 Silver 受賞店 0.500000 The Tabelog Award 2023 Bronze 受賞店 0.181818
「ジャンル」
Value Ratio
くじら料理 0.333333
東南アジア料理 0.125000
チーズ料理 0.111111
豚しゃぶ 0.100000
タイ料理 0.050000
イノベーティブ 0.050000
惣菜・デリ 0.043478
インド料理 0.038462
フレンチ 0.037736
コロッケ 0.034483
まとめ
今度、北海道に行くときは
ランチで、タコス料理
ディナーで、くじら料理
の店も候補に入れて探して食べてみようと思います。
以上!!
今回はここまで。ではまた。👋👋👋
この記事、需要あるのかな…。

