AI帶你省錢旅游!精準預測民宿房源價格!( 七 )

隨機森林最后的結果如下
r_forest_rmse, r_forest_r2# (218.7941962807868, 0.4208644494689676)GBDT建模def GBDT_model(df):'''構建模型并返回評估結果輸入: 數據dataframe輸出: 特征重要度與評估準則(RMSE與R-squared)'''X = df.drop(['price'], axis=1)Y = df['price']X_columns = X.columnsX_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=42)clf = GradientBoostingRegressor()parameters = {'learning_rate': [0.1, 0.5, 1],'min_samples_leaf': [10, 20, 40 , 60]}cv = GridSearchCV(estimator=clf, param_grid=parameters, cv=5, verbose=3)model = cvmodel.fit(X_train, y_train)pred = model.predict(X_test)r2 = r2_score(y_test, pred)mse = mean_squared_error(y_test, pred)rmse = mse**.5coefficients = model.best_estimator_.feature_importances_importance = np.abs(coefficients)feature_importance = pd.DataFrame(importance, index= X_columns,columns=['importance']).sort_values('importance', ascending=False)[:10]return r2, mse, rmse, feature_importanceGBDT_r2, GBDT_mse, GBDT_rmse, GBDT_feature_importance = GBDT_model(model_df)GBDT_r2, GBDT_rmse# (0.46352992147034244, 210.58063809645563)結果&分析目前隨機森林的表現最穩定 , 而集成模型GradientBoostingRegression 的R2很高 , RMSE 值也偏高,Boosting的模型受異常值影響很大 , 這可能是因為數據集中的異常值引起的 。
下面我們來做一下優化 , 刪除數據集中的異常值 , 看看是否可以提高模型性能 。
效果優化異常值在早些時候就已經被識別出來了,我們基于統計的方法來對其進行處理 。
# 基于統計方法計算價格邊界q3, q1 = np.percentile(model_df['price'], [75, 25])iqr = q3 - q1q3 + (iqr*1.5)# 得到結果245.0我們把任何高于 245 美元的值都視為異常值并刪除 。
new_model_df = model_df[model_df['price']<245]# 繪制此時的價格分布sb.histplot(new_model_df['price'])plt.title('New price distribution in the dataset')

AI帶你省錢旅游!精準預測民宿房源價格!

文章插圖
重新運行這些算法
linear_feat_importance, linear_rmse, linear_r2 = linear_reg(new_model_df)r_forest_rmse, r_forest_r2, r_fores_best_params, r_forest_importance = random_forest(new_model_df)GBDT_r2, GBDT_mse, GBDT_rmse, GBDT_feature_importance = GBDTboost(new_model_df)得到的新結果如下
AI帶你省錢旅游!精準預測民宿房源價格!

文章插圖
歸因分析那么,基于我們的模型來分析,在預測大曼徹斯特地區 Airbnb 房源的價格時,哪些因素更重要?
r_feature_importance = r_forest_importance.reset_index()r_feature_importance = r_feature_importance.rename(columns={'index':'Feature'})r_feature_importance[:15]
AI帶你省錢旅游!精準預測民宿房源價格!

文章插圖
# 繪制最重要的15個因素r_feature_importance[:15].sort_values(by='AVG_Importance').plot(kind='barh', x='Feature', y='AVG_Importance', figsize=(8,6));plt.title('Top 15 Most Imporatant Features');
AI帶你省錢旅游!精準預測民宿房源價格!

文章插圖
我們的模型給出的重要因素包括:
  • accommodates :可以容納的最大人數 。
  • bathrooms_new :非共用或非私人浴室的數量 。
  • minimum_nights :房源可預定的最少晚數 。
  • number_of_reviews :總評論數 。
  • Free street parking :免費路邊停車位的存在是影響模型定價的最重要的便利設施 。
  • Gym :健身房設施 。
總結&展望
AI帶你省錢旅游!精準預測民宿房源價格!

文章插圖
我們通過對Airbnb的數據進行深入挖掘分析和建模 , 完成對于民宿租賃場景下的AI理解與建模預估 。我們后續還有一些可以做的事情,提升模型的表現,完成更精準地預估,比如:
  • 更完善的特征工程,結合業務場景構建更有效的業務特征 。
  • 使用xgboost、lightgbm、catboost等模型 。
  • 使用貝葉斯調參等方法對超參數做更深入的調優 。
  • 深度學習與神經網絡的方法引入 。
參考資料