5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【データサイエンス入門】機械学習で民泊部屋の最適価格を求める🏠Airbnbデータセット

Posted at

はじめに🏠💰
今回もオープンデータで遊んでみる企画です😋
Airbnbは利用したことないので細かいことはわからないですが
ホテルの部屋のダイナミックプライシングや、ユーザーが価格を決めるときのサポートとして、機械学習による価格予測が利用されてきていますね!
👇OYOでは機械学習を利用し部屋の価格を1日4,300万回も変動させ、利益を最大化しているみたいですね。
OYO、インターコンチネンタルが「ダイナミックプライシング」を推進する一方で、真逆の戦略を採るホテルも | https://airstair.jp/oyo-dynamic-pricing/

#データ📊
Signateのデータを利用します。
【練習問題】民泊サービスの宿泊価格予測 | https://signate.jp/competitions/266
スクリーンショット 2020-06-19 20.32.00.png

構成は以下のようになってます。

カラム ヘッダ名称 データ型 説明
0 id int インデックスとして使用
1 accommodates int 収容可能人数
2 amenities char アメニティ
3 bathrooms float 風呂数
4 bed_type char ベッドの種類
5 bedrooms float ベッドルーム数
6 beds float ベッド数
7 cancellation_policy char キャンセルポリシー
8 city char 都市
9 cleaning_fee int クリーニング料金を含むか
10 description char 説明
11 first_review char 最初のレビュー日
12 host_has_profile_pic int ホストの写真があるかどうか
13 host_identity_verified int ホストの身元確認が取れているか
14 host_response_rate char ホストの返信率
15 host_since char ホストの登録日
16 instant_bookable char 即時予約可能か
17 last_review char 最後のレビュー日
18 latitudes float 緯度
19 longitude float 経度
20 name char 物件名
21 neighbourhood char 近隣情報
22 number_of_reviews int レビュー数
23 property_type char 物件の種類
24 review_scores_rating float レビュースコア
25 room_type char 部屋の種類
26 thumbnail_url char サムネイル画像リンク
27 zipcode int 郵便番号
28 y float 宿泊価格

#AutoMLツール「VARISTA」
プログラミング知識ゼロの初心者でも安心なAutoMLツールを利用します!
varista.aiはAutoMLツールと言われる、機械学習のパイプラインを自動化してくれるサービスです。
ノンコーディングで、データの可視化、学習、予測などが行える優れものです。
普段Python/Rで機械学習をしている方も、実装前のデータ調査などで役立つ機能が利用できるツールでもあります。
EmailかSNSアカウントがあれば無料で開始できるのでおすすめです。
👉VARISTA | https://www.varista.ai/
スクリーンショット 2020-06-19 20.35.19.png

#プロジェクトのセットアップ✌️
スクリーンショット 2020-06-19 20.53.23.png
スクリーンショット 2020-06-19 20.54.11.png
プロジェクト名を入力し、予測する列を設定します。
今回は「y」が予測する価格になります。

#データセットアップ🍔
###不要な列の削除
上の列のうち学習に利用しない方がいい不要な列を指定します。

「id」列
無規則なユニークな列は学習に影響がないので削除します。
スクリーンショット 2020-06-19 20.59.46.png

「amenities」列
内容が構造体になっているため、利用するとしたら別途パースが必要なため、今回は削除
スクリーンショット 2020-06-19 20.59.55.png

「description」列
自然言語列のため、利用するとしたら別途作業が必要なため、今回は削除
スクリーンショット 2020-06-19 21.02.36.png

「name」列
自然言語列のため、利用するとしたら別途作業が必要なため、今回は削除
スクリーンショット 2020-06-19 21.03.48.png

「thumbnail_url」列
画像分析を行う場合は、ここからダウンロードしたデータを利用しますが、テーブルデータのみで学習を行うため、今回は不要
スクリーンショット 2020-06-19 21.04.27.png

以上5列を削除します。

###相関関係の確認
varistaのビジュアライズ機能を利用して、相関関係の高い特徴を確認してみましょう。

第1位**「accoummodates」列**
相関度:52.2
部屋の収容可能人数です。確かに部屋が広く、収容人数が上がれば上がるほど、部屋の価格は高いのがあってそうですね🤔
スクリーンショット 2020-06-19 21.11.53.png

第2位**「bedrooms」列**
相関度:49.6
ベッドの数です。部屋の収容可能人数と同じく、ベッド数も増えれば増えるほど、価格が高くなるのも理解できます🤔
スクリーンショット 2020-06-19 21.15.39.png

第3位**「bathrooms」列**
相関度:45.6
風呂の数です。うん🤔
スクリーンショット 2020-06-19 21.18.25.png

学習させた際にこれらの特徴がどう影響してくるのか、見てみましょう。

#学習🔥
まずはとりあえず、何も設定せずに学習を行ってみます。
スクリーンショット 2020-06-19 21.39.36.png
#学習結果1
約6分で学習完了しました。
スクリーンショット 2020-06-20 16.26.33.png

各結果の詳細をみていきます。

###精度
全体のスコアは51となっています。
VARISTAではモデルの評価を1〜100のスコアで表示してくれます。
細かな精度は横に表示されている、精度を確認することでわかります。

平均誤差
RMSEと呼ばれる誤差の表示です。
単位が目的変数と同じため、感覚的に誤差の大きさを把握することができます。
今回の場合「平均で約±113.9ドルくらいの誤差が出るモデルですよ」っていうのがわかります。
SignateでのAirbnbコンペでも、この評価指標が使われています。
スクリーンショット 2020-06-19 21.53.39.png
参考(https://funatsu-lab.github.io/open-course-ware/basic-theory/accuracy-index/#rmse)

平均誤差率
RMSPEと呼ばれる指標です。
スクリーンショット 2020-06-19 22.00.45.png
参考(https://qiita.com/23tk/items/2dbb930242eddcbb75fb)

###影響度の高い要因
スクリーンショット 2020-06-19 22.05.31.png
予測結果におおきく影響を与える要因が確認できます。

1位は「room_typeごとのyの平均」
一軒家の平均価格、プライベートルームの平均価格、シェアルームの平均価格が大きく影響しているようです。
これはvaristaの自動特徴量エンジニアリングの機能によって作られた特徴です。
通常では人の手でこう言った特徴をひとつづつ追加するのですが、知識がなくても自動で価値のある列を生成してくれるのもAutoMLの強みだと思います。
スクリーンショット 2020-06-19 22.09.58.png

2位、3位...は「accommodates」、「bedrooms」...
これらの列は相関関係で確認した通り、元から相関度の高い列でしたね。
しっかりと価格予測時に参考にされているのがわかります。

zipcodeごとのyの平均
要するに地区毎の平均価格も影響を与えているようです。
日本で言うと千代田区での平均価格、世田谷区での平均価格といったようなものなので、確かに価格設定時には参考になりそうです。
スクリーンショット 2020-06-19 22.19.24.png

#モデルの改善⚡️
機械学習において精度を改善するためにとる手段は大きく分けて以下の4つがあります。

  1. データの改善
  2. アルゴリズムの変更
  3. パラメータの調整
  4. 学習パイプラインの改善

まずは4の学習パイプラインの改善を行います。
varistaでは学習時の設定で、学習レベル、検証データの割合、交差検証の分割数を変更することができます。
スクリーンショット 2020-06-19 22.28.51.png
学習レベルを変更することで、探索するアルゴリズム数、探索時のイテレーション数などを増やすことができます。
また検証データの割合を減らすことで、簡単に精度の改善が見込めます。
しかし、あまりにデータセット数が少ない場合だと、スコア算出時のデータに偏りが生じてしまい、精度の信憑性が下がってしまう可能性があるので要注意です。
さらに、交差検証の分割数を増やすことで、パラメータチューニングや特徴選択の精度をあげることができますが、デメリットとして学習時間が長くなることが挙げられます。

以下の変更をして再学習します。
学習レベル:1 -> 3
検証データの割合:20 -> 5%
交差検証の分割数:3(そのまま)

#学習結果2
スクリーンショット 2020-06-20 16.29.11.png
###改善結果
スコアが3上昇しました🔥
平均誤差もわずかですがよくなりました。

このように学習データを少し増やすだけでも、精度が改善されるのがわかります。
もっと大きく改善したい場合は通してもデータそのものをいじる必要が出てくるので、それはまたの機会に。

#おわり🍕
ノンコーディングでもデータサイエンスを行うのに便利なツールがたくさんで始めています。
さまざまな技術を駆使して、データから得られる有益な情報を活用してみましょう!
これから機械学習を学ぼうと思っている方も、AutoMLを利用して、基礎概念を体系的に身に付けておくのもありだと思います。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?