多元線性回歸 - 北京高檔酒店價格影響因素分析

1. 案例說明

通過收集相關(guān)網(wǎng)站對酒店評價,poi地理數(shù)據(jù),和酒店自身介紹探索影響酒店入住價格的因素
數(shù)據(jù)來源:狗熊會

2.變量分析探索

#讀取數(shù)據(jù)
import os
os.chdir(r'C:\Users\Administrator\Desktop\狗熊會數(shù)據(jù)\5.1 北京高檔酒店價格分析')
df =pd.read_csv('hoteldata.csv')
#查看數(shù)據(jù)
df.head()
#查看數(shù)據(jù)類型
df.info()


數(shù)據(jù)無缺失值,變量類型正確

#查看描述性統(tǒng)計
df.describe().T
酒店價格

查看酒店價格分布,酒店價格集中在1000-2000元間



未避免殘差異方差,因變量需取對數(shù)

#酒店房價正太轉(zhuǎn)化
df['房價取對數(shù)'] = np.log1p(df['房價']) 
df['房價取對數(shù)'].hist(bins=20)
plt.show()
酒店價格取對數(shù)

對音箱酒店房價因素的變量進行探索性分布

sns.boxplot(x='房間類型',y='房價取對數(shù)',data=df)

方差分析

import statsmodels.api as sm 
from statsmodels.formula.api import ols
ana =ols('房價取對數(shù)~C(房間類型)',data=df).fit()
sm.stats.anova_lm(ana)
方差分析

F值顯著,房間類型對酒店因素有明顯相關(guān)性

sns.boxplot(x='地區(qū)',y='房價取對數(shù)',data=df)

方差分析



F值不顯著,地區(qū)對酒店因素?zé)o明顯相關(guān)性

sns.scatterplot(x='經(jīng)度',y='緯度',hue='房價取對數(shù)',data=df)

查看酒店經(jīng)緯度散點圖,酒店都集中在市中心,且價格跟市中心距離無太大關(guān)聯(lián),某些酒店遠離市中心但是房價較高,可能為度假區(qū),查看這些數(shù)據(jù)



百度了一下這個酒店,哇~~


3.修改變量

#變量轉(zhuǎn)換
對時間序列變量,轉(zhuǎn)化為連續(xù)變量,將分類變量啞編碼
#時間序列變量處理
df['裝修年限'] = 2018-df['裝修時間']
#對分類變化進行啞變量轉(zhuǎn)換
area = pd.get_dummies(df['地區(qū)'])
#以其他城區(qū)作為基準(zhǔn)組
area.drop('其他城區(qū)',axis=1,inplace=True)
housetype  =  pd.get_dummies(df['房間類型'])
#以標(biāo)準(zhǔn)間作為基準(zhǔn)組
housetype.drop('標(biāo)準(zhǔn)間',axis=1,inplace=True)
df_model = pd.concat([df,area],axis=1)
df_model = pd.concat([df_model,housetype],axis=1)

相關(guān)性分析

#定義自變量和因變量
#自變量
cols = ['衛(wèi)生評分','服務(wù)評分','設(shè)施評分','位置評分','評價數(shù)','公司','出行住宿','校園生活','裝修年限','東城區(qū)','朝陽區(qū)','海淀區(qū)','商務(wù)間'
       ,'豪華套間']
#相關(guān)性分析
plt.figure(figsize=(12,9))
sns.heatmap(df_model[cols].corr(),vmax=1,annot=True)

相關(guān)性高于0.6就具有高共線性,需對變量進行剔除,或者變量轉(zhuǎn)化,將評分屬性降維處理,降維為變量'綜合評分'

from sklearn.preprocessing import MinMaxScaler
scaler =MinMaxScaler()
#先將評分屬性進行標(biāo)準(zhǔn)化處理
df_model[['衛(wèi)生評分','服務(wù)評分','設(shè)施評分','位置評分']] = scaler.fit_transform(df_model[['衛(wèi)生評分','服務(wù)評分','設(shè)施評分','位置評分']])
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(df_model[['衛(wèi)生評分','服務(wù)評分','設(shè)施評分','位置評分']])
pca.explained_variance_ratio_
#其中一個變量就能解釋其中90%的變異數(shù)據(jù)
pca = PCA(n_components=1)
df_model['綜合評分'] = pca.fit_transform(df_model[['衛(wèi)生評分','服務(wù)評分','設(shè)施評分','位置評分']])
pca.components_
#將公司和出行住宿具有高共線性,將公司變量剔除
cols = ['綜合評分','評價數(shù)','出行住宿','校園生活','裝修年限','東城區(qū)','朝陽區(qū)','海淀區(qū)','商務(wù)間'
       ,'豪華套間']

4.構(gòu)建模型

不進行變量篩選,構(gòu)建模型

import statsmodels.api as sm
from statsmodels.formula.api import ols
formula = '%s~%s'%('房價取對數(shù)','+'.join(cols))
lm_s = ols(formula,data=df_model).fit()
lm_s.summary()

R方0.58,DW:1.117 (DW接近2,殘差自相關(guān)不存在),模型表現(xiàn)尚可,其中評價數(shù)和裝修年限相關(guān)性不顯著(P值>0.05)

#殘差QQ圖
resid = lm_s.resid
from scipy import stats
fig = plt.figure()
res = stats.probplot(resid,plot=plt)  #樣本為Series荤牍,默認dist='norm' 擬合直線為正太分布

對變量進行篩選

#變量篩選,使用向前法,以AIC為標(biāo)準(zhǔn)對變量進行篩選
#定義向前選擇法
import statsmodels.api as sm
from statsmodels.formula.api import ols
def forward_select(data,col,y):
    remaining = col
    #remaining.remove(y)#定義自變量
    selected = []
    current_score,best_new_score = float('inf'),float('inf')#定義
    while remaining:
        aiclst = []
        for i in remaining:
            formula = '%s~%s'%(y,'+'.join(selected+[i]))
            aic = ols(formula=formula,data=data).fit().aic
            aiclst.append((aic,i))
        aiclst.sort(reverse =True)
        best_new_score,best_i = aiclst.pop()#刪除AIC最高的變量,并返回值
        if current_score > best_new_score:
            remaining.remove(best_i)
            selected.append(best_i)
            current_score = best_new_score
            print('aic is %f,coutinuing'%current_score)
        else:
            print('forward_select over')
            break
    return(selected)
cols_fs = forward_select(df_model,cols,'房價取對數(shù)')

篩選后變量為
['綜合評分', '豪華套間', '商務(wù)間', '出行住宿', '校園生活', '海淀區(qū)', '東城區(qū)', '朝陽區(qū)']
構(gòu)建模型

formula = '%s~%s'%('房價取對數(shù)','+'.join(cols_fs))
lm_s1 = ols(formula,data=df_model).fit()
lm_s1.summary()
#殘差QQ圖
resid1 = lm_s1.resid
from scipy import stats
fig = plt.figure()
res = stats.probplot(resid1,plot=plt)  #樣本為Series举塔,默認dist='norm' 擬合直線為正太分布
#強影像點分析
from statsmodels.stats.outliers_influence import OLSInfluence
OLSInfluence(lm_s1).summary_frame().head()
#VIF方差分析
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
for i in range(len(cols_fs)):
    print('%s vif: %f' %(cols_fs[i],vif(np.array(df_model[cols_fs]),i)))
#殘差異方差性顯著性
from statsmodels.stats.diagnostic import het_breuschpagan
het = het_breuschpagan(resid1,df_model[cols_fs])
print('p-value: %6.4f'%het[-1])

p-value: 0.0000
模型診斷
殘差不存在異方差性,模型內(nèi)變量VIF 小于10,無多重共線性,COOK距離表現(xiàn)正常,無異常點

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呻袭,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異票编,居然都是意外死亡,警方通過查閱死者的電腦和手機卵渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門慧域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浪读,你說我怎么就攤上這事昔榴。” “怎么了碘橘?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵互订,是天一觀的道長。 經(jīng)常有香客問我痘拆,道長仰禽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任纺蛆,我火速辦了婚禮吐葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犹撒。我一直安慰自己折联,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布识颊。 她就那樣靜靜地躺著诚镰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祥款。 梳的紋絲不亂的頭發(fā)上清笨,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音刃跛,去河邊找鬼抠艾。 笑死,一個胖子當(dāng)著我的面吹牛桨昙,可吹牛的內(nèi)容都是我干的检号。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛙酪,長吁一口氣:“原來是場噩夢啊……” “哼齐苛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桂塞,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凹蜂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玛痊,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡汰瘫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了擂煞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混弥。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颈娜,靈堂內(nèi)的尸體忽然破棺而出浙宜,到底是詐尸還是另有隱情官辽,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布粟瞬,位于F島的核電站裙品,受9級特大地震影響市怎,放射性物質(zhì)發(fā)生泄漏区匠。R本人自食惡果不足惜割坠,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叠赐。 院中可真熱鬧戚篙,春花似錦五鲫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乱灵,卻和暖如春塑崖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阔蛉。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工弃舒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓聋呢,卻偏偏與公主長得像苗踪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子削锰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容