不動産取引価格予測

不動産価格はいくらになる?

賞金: 100,000 参加ユーザー数: 410 4年弱前に終了

validation score と public scoreについて

こんにちは!

validation score と public scoreについて参加者の皆様に質問があります。 私たちのチームでは、cv:190.497, LB:71.284となり、 このように2つのスコアに大きな差があります。

これはほかの参加者の方々も同様でしょうか。 また、このような結果になる理由としてはどのようなことがあげられるでしょか。

・train data と test dataの分布が異なる(取引時点が2018を境に分かれている)
・public と privateの分け方に偏りがある

などの理由が考えられますが、ほかの参加者の方々はどう考えておられるのか知りたいです。 また、皆様のcvスコアや外れ値の処理方法などあれば参考にさせて頂きたいです。なお、私たちのチームでは現時点で外れ値処理はしていません。

Icon18
tak

僕も同じような問題に頭を悩ませています。
僕の場合は CV: 150.371, Public: 72.258 です。外れ値処理はしていないです。

パッと考えただけで根拠はないですが、乖離が起こる原因としては前者ではなく後者なのではないかと考えています。
時系列が異なるけど2018年を境に不動産価格に急激な変化が起こったと考えにくいかなと思っています。
むしろ Public には 学習データにあるような外れ値(異常に高い価格)のデータが少ないかもしれないと考えています。

Aws4 request&x amz signedheaders=host&x amz signature=feeccebc1e9ae7459e8f801bdd080a2765ae21fa3bc109ede29d76b1ef0240be
masato8823

私もその線で考えています。 そうなるとpublicのLBのスコアはあまり参考にならないかもですね

Aws4 request&x amz signedheaders=host&x amz signature=51c0ab3dffcafda625cceb59d5c13210499ba1c50db41a9f0f017c0c1fddc858
chun1182

RMSE1標準偏差ととらえられるので、外れ値の影響をモロに受けます。 平均65に対してRMSEが100付近なので外れ値がかなり効いてますね。

値段の分布を確認すると

print((pd.cut(train_df['y'], [-1, 1, 10, 100, 1000, 10000, 100000])).value_counts())

(10, 100] 298760

(100, 1000] 28059

(1, 10] 27126

(1000, 10000] 1700

(-1, 1] 652

(10000, 100000] 47

これからある程度同じような分布の配列と、10%低く外れた予測値を用意します。 あと50000がない状態の配列、予測値も用意します。

mogi = np.array([5]600 + [50]6500+[500]600+[5000]40+[50000])

pred = mogi*0.9

mogi2 = np.array([5]600 + [50]6500+[500]600+[5000]40)

pred2 = mogi2*0.9

これをもとに今回の指標:RMSE、別の価格コンペで使われた指標(RMLSE、MAPE)とで見比べると

MSE = ((mogi-pred)**2).sum()/len(mogi)

print('RMSE', MSE**0.5) #RMSE 68.81

LMSE =((np.log1p(mogi)-np.log1p(pred))**2).sum()/len(mogi)

print('RMLSE', LMSE**0.5) #RMLSE 0.1022

print('MAPE', (np.abs(mogi-pred)/mogi).sum()*100/len(mogi)) #MAPE 10.00

MSE = ((mogi2-pred2)**2).sum()/len(pred2)

print('RMSE-50000', MSE**0.5) #RMSE-50000 38.81

LMSE =((np.log1p(mogi2)-np.log1p(pred2))**2).sum()/len(mogi2)

print('RMLSE-50000', LMSE**0.5) #RMLSE-50000 0.1022

print('MAPE-50000', (np.abs(mogi2-pred2)/mogi2).sum()*100/len(mogi2)) #MAPE-50000 10.00

となってRMSEは全体の0.1%しかない高い値に大きく左右されています。

高い値はpublicには含まれてなさそうなので、privateにどれくらい異常に高い値が含まれるか、それを当てられるか勝負かもです。 コメント欄の使い方慣れてなく見にくくて申し訳ないです。

Aws4 request&x amz signedheaders=host&x amz signature=feeccebc1e9ae7459e8f801bdd080a2765ae21fa3bc109ede29d76b1ef0240be
masato8823

計算ありがとうございます! RMSEだと高額物件の予測誤差に敏感なので、やはり外れ値とも取れそうな高額物件の予測がカギになりそうですね、

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。