良いラブホの条件をデータサイエンスする。
TL:DR;
ラブホレビューサイト(couples様)からスクレイピングしたラブホのデータと評価を元に、良いラブホの条件を機械学習で探った。
条件を元にユーザーが何を求めているかをリバースエンジニアリング的に考えてみた(かった)
免責
解析等は至って真面目に行いましたが、これは内容の正しさを保証するものではありません。
当記事の情報により生じたいかなる不都合や損害に対しても責任を負うことは出来ませんのでご了承ください。
なんでラブホなの?
ジョーク記事だからです。
別に旅館とかでもいいんですけど、題材にジョーク感がほしかったので。
スクレイピングにあたって。
- 情報解析目的である。
- 私的利用の範囲に留め、データの再配布はしない。
- クロールスクリプトも公開しない。
- robots.txtでAllowになっていることを確認した。
- robots metaがないか確認したが(自分が見た限りでは)存在しなかった。
- ログインせずに取得できる情報をとっているので利用規約上の問題は発生しない。
- リクエスト感覚は2秒開けた。
- ページ番号を乱択で取得するようなことはしていない。
ということで今回のスクレイピングは問題がないと判断しております。
データ
今回なんやかんやで出来たデータはこんな感じです。 別にここ真面目に読む必要は無いんですが、解析編で特徴量の話する時に必要なので書いてます。
データ数:3476件
カラム
- rating : 0〜5の評価。今回のTarget
- num reviews : 付いていたレビューの数。
- price hoge : 宿泊価格のhoge。料金体系が複雑すぎるので、統計量にした。hogeは最大、最小、平均、中央値。
- can go out : 外出可能かどうか
- can reserve : 予約可能かどうか
- how check in : checkin 方法。フロントとかパネルとか
- pay style : 支払い方法。フロントとかエアシューターとか(エアシューターって何?)
- available credit : 使えるカードの種類数
- benefits :特典。自然言語処理めんどくて文字数にしちゃった(許して)
- parking : 駐車場の台数
- num rooms : 部屋数
- servicr time :サービスタイムのタイポ。サービスタイムがあるかないか。
- belongs to- : ホテルグループのホテルかどうか(個人経営じゃないかに近いと思っている)
- hotel_in_1km : 周囲1kmのホテルの件数
- hotel_in_10km : 周囲10kmのホテルの件数
- num_Nan :欠損してるカラムの数。欠損が珍しくないデータなので入れてみた。
- 〜いっぱい : アメニティとか施設。0は無し、1はあり。0.5は一部有りってことにした。
モデル
脳死のLightGBMです。パラメータチューニングは一応Optunaしてみたんですが、結果があまりにも変わらなかったので、最終的には初期パラメータのモデルを使っています。
objective:regression,metric:rmseです。
まず特徴量の相関係数を眺める。
お約束なのでとりあえずやっておきます。
まさかのサービスタイムとチェックイン方法の意味なし! バグは一応確認したので、あったとしても結構深いバグでとるのが大変なので今回はこの2つの特徴量落としてやっていこうと思います。
解析編
解析方法
ランダム分割、Fold数4のCVを行っています。
metricとしてrmseは一応計算していますが、これに振り回されてもアレなのでpredict-targetの散布図を書くことでおおよその傾向を見ることとしたいと思います。
解析のためのfeature importanceは全体のデータに対して学習したもので見ます。(CVのときのfeature importanceってどうすればいいんだろう)
解析1
おおよそ右肩上がりの傾向はつかめていますが、ちょっとブレが大きすぎますね… この原因として
・レビュー数が少ない場合rating(Target)自体の信頼性が低い
という仮説がたてられます。実際にTargetとPredictの誤差上位のレビュー数を確認してみると…
1 1 1 0 0 1 1 0 0 2 0 0 1 1 0 1 1 0 3 3 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 2 0 0 0 1 0 1 1 1 1 0 0 0
っていう感じでした。このレビュー数はratingをつけた数ではなく、文でのレビュー数なので、0も存在します。 おおよそレビュー数が低いと評価が安定しなそうです。レビュー数のヒストグラムをとりあえず見てみましょう。
うーん0〜1くらいのレビュー数が圧倒的に多いですね… これを切り捨てるのは汎化性能的にどうなんだという話もありますが、Target自体が信頼出来ないとなるとそうも言ってられないので、レビュー数<2のデータを切り捨ててやってみます。
レビュー数>=2のものだけでの解析
レビュー数>=2 のデータだけでの解析結果はこんな感じ。
悪くないですね!さっきよりはだいぶちゃんと予測できてますし、このモデルベースならある程度考察に意味がありそうです。
ということでfeature_importanceを見てみます。縦1列だと見にくいのでExcelに貼って適当にいい感じにします。
次に、このfeature importance上位の特徴量から、良いラブホの条件(ユーザーが求めている条件)を考察していきたいと思います。
良いラブホの条件とは?
ラブホ街のラブホはいいラブホのことが多い。
まず最上位の条件であったhotel_in_10km及び、hotel_in_1kmについて、その一次での影響を見てみたいと思います。
横軸が、10km圏内のラブホ件数、縦軸がratingです。このグラフからまず分かることは。
- 所謂ラブホ街が存在することがこのグラフからもわかる。
- (特に1kmの方のグラフに注目すると)ラブホ街のラブホは、大外れが少ない。
ということがわかります。おそらくラブホ街では競合が多いため、淘汰や競争の結果質の良いラブホが増えるようです。
ラブホに迷ったら、もし近くにラブホ街がある場合は、そっちに行くのが良い
金額の高いラブホはハズレが少ない。
次に、重要度の高い金額とratingの相関を見てみましょう。
このグラフを見ると分かる通り、金額が上がるに連れてratingの最低値が上がっていることがわかります。 つまりラブホは高いほどいい傾向が有るということです。
何を当たり前のことを…と思われるかもしれませんが、ボッタクリ居酒屋みたいな問題が度々取りざたされる夜の商売において、 ラブホは値段とクオリティの釣り合いが結構取れている。というのは重要な情報だと思います。
とはいえ、格安な1万円台でも評価の良いところはちゃんと有るので、必ずしも高いお金を払う必要があるとは言えませんが、お金に余裕があるかたは払ったほうが安全ということは言えると思います。
宿泊1万円でも良いラブホはある。 けど、お金をかければかけるほど、ハズレが無い。
ユーザーが求めている条件とは?
良いラブホとして、ラブホ街、高いラブホというのはわかったとして、ユーザーはじゃあ何にがあるから高いラブホを良いと評価しているのか、ということも知りたいですね。ということで考えていきます。
feature imoprtance上位のうち、設備やアメニティに関するものを上位から見てみると。
と続いていきます。これら設備に関しては全部丁寧に見ているとキリが無いので、ざっくりとした所感だけにしようと思います。
駐車場と部屋数はあんまり関係ない?
これらに関しては直接の影響度は少なめでした。が、なんとなくの傾向として、どちらも中程度(parking 30台、部屋数40〜50程度)の規模のホテルの満足度が高めでした。 都市部の大きめのホテルとなるとグループ化されたホテルであったりして評価が高くなるのかもしれません。
カップル利用であってもエンタメを求めている?
今回スクレイピングした元はカップルを対象としたサイトであったため、女子会利用などでのレビューは比率として少なめになると思われます。そのような条件下でも
サウナ、ホームシアター、カラオケ、TVゲーム
といったエンタメ要素が特徴量上位となるあたり、現代のカップルはまさにレジャーホテルとしての役割を求めているのかもしれません。
ちなみにSMルームの重要度は地の底でした。
みんな日にちを決めてラブホに行っている?
予約可能なホテルのほうが平均的に評価が高い傾向が少し有りました。
予約を受け付けるホテルの値段帯が高いということもありそうですが、これが影響するということは、行きずりとかその場の流れというより、パートナーと日にちを決めて利用する人がおおいのかもしれませんね。
最近のカップルはエンタメも求めてそう。女子会需要などと合わせてレジャーホテル化は益々進むかも?
終わりに
ジョークで記事書こうとしたらなんか無駄にやること多くて時間を無駄にした気分です。
とはいえラブホのデータ解析って、表立って会社とかではやりにくいと思うので、意外と新規性のある試みだったんじゃないかなーと思っています。
余裕の有る方はぜひ別視点とか別データでの解析をしてくださると面白いことが見えてくるかもしれません。
蛇足
水中ライトって何?