使用決策樹和隨機森林探究影響房產銷售的因素

import pandas as pd
import numpy as np

data=pd.read_excel(r'/Users/fangluping/Desktop/望潮府.xlsx',encoding='utf_8_sig',
                  usecols=['銷售狀態','產品類型','戶型','戶型配置','預測建築面積','表價總價','建面表單價','價格方案名稱','調價幅度(%)'],
                  skipfooter=1)

#數據清洗
data.銷售狀態[data.銷售狀態=='未售']=0
data.銷售狀態[data.銷售狀態 !=0]=1
data['業態']=[x.split('-')[1] for x in data.產品類型.dropna()]
data.drop(['產品類型','價格方案名稱'],axis=1,inplace=True)

#啞變量處理
dummy=pd.get_dummies(data[['戶型','戶型配置','業態']])

#水平合併data和啞變量數據集
data=pd.concat([data,dummy],axis=1)
data.drop(['戶型','戶型配置','業態'],axis=1,inplace=True)

數據清洗完畢,找出最佳參數組:數組

#使用網格法找出最優越模型參數
from sklearn.model_selection import GridSearchCV
from sklearn import tree

#預設各參數的不一樣選項值
max_depth=[2,3,4,5,6]
min_samples_split=[2,4,6,8]
min_samples_leaf=[2,4,8,10,12]

#將各參數的值以字典的形式組織起來
parameters={'max_depth':max_depth,'min_samples_split':min_samples_split,'min_samples_leaf':min_samples_leaf}

#網格搜索法,測試不一樣的參數值
grid_dtcateg=GridSearchCV(estimator=tree.DecisionTreeClassifier(),param_grid=parameters,cv=10)

#模型擬合
grid_dtcateg.fit(X_train,y_train)

#返回最佳組合的參數值
print(grid_dtcateg.best_params_)

使用決策樹和隨機森林探究影響房產銷售的因素

單棵決策樹的預測準確率:dom

#單棵決策樹建模
from sklearn import metrics

#構建分類決策樹
CART_Class=tree.DecisionTreeClassifier(max_depth=3,min_samples_leaf=2,min_samples_split=2)

#模型擬合
decision_tree=CART_Class.fit(X_train,y_train)

#模型在測試集上的預測
pred=CART_Class.predict(X_test)

#模型的準確率
print('模型在測試集的預測準確率爲:',metrics.accuracy_score(y_test,pred))

使用決策樹和隨機森林探究影響房產銷售的因素

from matplotlib import pyplot as plt

y_score=CART_Class.predict_proba(X_test)[:,1]
fpr,tpr,threshold=metrics.roc_curve(y_test,y_score)

#計算AUC的值
roc_auc=metrics.auc(fpr,tpr)

#繪製面積圖
plt.stackplot(fpr,tpr,color='steelblue',alpha=0.5,edgecolor='black')

#添加邊際線
plt.plot(fpr,tpr,color='black',lw=1)

#添加對角線
plt.plot([0,1],[0,1],color='red',linestyle='-')

#添加文本信息
plt.text(0.5,0.3,'ROC curve(area=%0.2f)'%roc_auc)

#添加x軸與y軸標籤
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')

#顯示圖形
plt.show()

使用決策樹和隨機森林探究影響房產銷售的因素

隨機森林預測準確性:ide

#構建隨機森林,隨機森林能夠提升單棵決策樹的預測準確度
from sklearn import ensemble

RF_class=ensemble.RandomForestClassifier(n_estimators=200,random_state=1234)

#隨機森林的擬合
RF_class.fit(X_train,y_train)

#模型在測試集上的預測
RFclass_pred=RF_class.predict(X_test)

#模型的準確率
print('模型在測試集的預測準確率爲:',metrics.accuracy_score(y_test,RFclass_pred))

使用決策樹和隨機森林探究影響房產銷售的因素

#計算繪圖數據
y_score=RF_class.predict_proba(X_test)[:,1]
fpr,tpr,threshold=metrics.roc_curve(y_test,y_score)

#計算AUC的值
roc_auc=metrics.auc(fpr,tpr)

#繪製面積圖
plt.stackplot(fpr,tpr,color='steelblue',alpha=0.5,edgecolor='black')

#添加邊際線
plt.plot(fpr,tpr,color='black',lw=1)

#添加對角線
plt.plot([0,1],[0,1],color='red',linestyle='-')

#添加文本信息
plt.text(0.5,0.3,'ROC curve(area=%0.2f)'%roc_auc)

#添加x軸與y軸標籤
plt.xlabel('1-Specificity')
plt.ylabel('Sensitivity')

#顯示圖形
plt.show()

使用決策樹和隨機森林探究影響房產銷售的因素

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'

#自變量的重要性程度
importance=RF_class.feature_importances_

#構建序列用於繪圖
Impt_Series=pd.Series(importance,index=X_train.columns)

#對序列排序繪圖
Impt_Series.sort_values(ascending=True).plot(kind='barh')
plt.show()

使用決策樹和隨機森林探究影響房產銷售的因素

從圖中能夠看出,影響房屋出售率的因素,只有房價,不論是總價,仍是單價,除此以外,還有可售面積。其餘戶型、業態等因素對房屋出售幾乎沒有影響。svg

相關文章
相關標籤/搜索