俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

【12位解法】Probspace開催「民泊サービスの宿泊料金予測」の振り返り。

データ分析好きが集まる交流プラットフォーム「ProbSpace」で開催された「民泊サービスの宿泊料金予測」に参加し、12位(銀)の成績を残せました!

今回のコンペは、苦手としている回帰のタスクだったのですが、なんとか結果も残せてよかったです。

また、年度末年度始めの忙しい時期でしたが、ゴールデンウィークを活用して短期集中で取り組むことで追い上げることができたのも良い経験でした。

では、振り返って参りたいと思います。

1.全体構成

今回のコンペは、機械学習のテーマとしてもよく取り上げられるダイナミックプライシングをテーマとしたコンペティションとのことでした。

名前や緯度経度、部屋タイプなどのテーブルデータから価格を予測します。

数値のデータは直接特徴量として利用し、部屋タイプなどのカテゴリデータをどのように扱うかが精度に影響しました。

また、名前が「JP traditional house! Max10ppl! Near SensojiTemple」のように文章になっているので、自然言語処理の活用もポイントとなりました。

モデルは、異なるパラメータのLGBMで学習したモデル4つを使い、それぞれの予測結果の平均を最終的な提出としました。

2.前処理

前処理については、shirapon24さんの「初心者用サンプルコード」と、columbia2131さんの「tf-idfを用いたnameの埋め込みを参考にさせていただき、以下の処理を実施しました。

【前処理】

こちらは、訓練データ、テストデータの両方に適用する共通の処理です。

カラム 処理内容

name

neighborhood

room_type

last_review

日付データを以下の項目に分割。

  • 曜日
  • yymmdd形式の年月日

3.モデル構築

 モデルは異なるパラメタの4つのLGBMRegressorで学習させ、それぞれの予測値の平均をとって最終提出としました。

また、交差検証はラベルエンコーディングした【name】をもとにした、GroupKFoldで実施しました。

このモデルで提出したファイルで、最終スコア:0.72905 となり、全体で12位で、銀メダル圏内に入ることができました。

4.感想

今回のコンペは、民泊の様々な特徴量から価格を予測するというオーソドックスな回帰の課題がテーマでした。

年度末・年度始めでバタバタしていて、基本的なモデルとしてはLGBMしか試せなかったのですが、NNなど他のモデルでも取り組むことで、もう少し改善できたのではないかと考えています。

また、緯度経度などの情報からどのあたりの宿泊施設かわかるので、位置的な情報も、もう少し活用することで改善できたのかもと思いました。

次回コンペでは、じっくりと腰を据えて取り組みたいと思います。

5.謝辞

最後となってしまいましたが、本コンペを運営してくださいました、Probspase の運営の皆様、データを提供してくださいましたAirBnbの皆様、一緒にコンペに取り組んでいらっしゃった皆様、Twitter上でやりとりを実施させていただいた皆様に心より感謝申し上げます。

今年上期は、コンペだけでなく実生活の中でいろいろな人と交わりながら活動してきました。その中でコンペでも結果を残せたことは非常に良い経験となりました。

引き続き、このコンペで身に着けた知識や経験を生かして、引き続き実生活にも活動の場を広げていきたいと思います。

 

【過去記事】

G検定、E資格の取得から、これまでに取り組んできた道のりは以下にまとめております。何かのご参考にしていただければ幸いです。

oregin-ai.hatenablog.com

oregin-ai.hatenablog.com