Closed Quvotha closed 3 years ago
お題:民泊サービスにおける物件データを利用した宿泊価格予測モデルの作成 コンペティションサイトによるとデータの説明は次の通り。
カラム | ヘッダ名称 | データ型 | 説明 -- | -- | -- | -- 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 | latitude | 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 | 宿泊価格zipcode
についてWikipediaによると1桁目, 2-3 桁目, 4-5 桁目という風に地域を階層化するためのコードらしい。
コンペのデータについて、以下の点を確認。
city
と zipcode
の1桁目は密接な関係があり city
がわかれば仮に zipcode
がブランクでも1桁目はなんとか求められそう(対応関係がある程度決まっている)物件の所在地の特定に役に立つ項目なので特徴量にできるよう前処理を組みたい。
zipcode
を一般的な NNNNN もしくは NNNNN-NNNN 形式に正規化できることzipcode
から1桁目, 1-5桁目を city
や他の行を使った欠損値の補完を行いつつ特定したいamenities
について特定のアメニティの有無を特徴としてモデルに入力したい。あるいはアメニティの組み合わせを Tf-IDF 等で特徴量にするなど。
host_since
にするかは微妙なところproperty_type
と zipcode
は訓練データとテストデータとで共有していない値があるので注意。
categorical = ['bed_type', 'cancellation_policy', 'city', 'property_type', 'room_type', 'zipcode']
for c in categorical:
if train[~train[c].isin(test[c])].shape[0] == 0 and test[~test[c].isin(train[c])].shape[0] == 0:
continue
else:
print(c, train[~train[c].isin(test[c])][c].nunique(), test[~test[c].isin(train[c])][c].nunique())
property_type 8 1 zipcode 117 32
フラグ項目は True="t", False="f" になっている模様
train['cleaning_fee'].unique(), train['host_has_profile_pic'].unique(), train['host_identity_verified'].unique(), train['instant_bookable'].unique()
(array(['t', 'f'], dtype=object),
array(['t', nan, 'f'], dtype=object),
array(['f', 't', nan], dtype=object),
array(['f', 't'], dtype=object))
いったん満足したのでおしまい。
Be familiar with competition's dataset, get inspiration of feature engineering.