最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

線性回歸和時間序列分析北京房價影響因素可視化案例|附代碼數(shù)據(jù)

2023-03-16 18:11 作者:拓端tecdat  | 我要投稿

全文鏈接:http://tecdat.cn/?p=21467

最近我們被客戶要求撰寫關(guān)于北京房價的研究報告,包括一些圖形和統(tǒng)計輸出。

在本文中,房價有關(guān)的數(shù)據(jù)可能反映了中國近年來的變化

目的

  • 人們得到更多的資源(薪水),期望有更好的房子

  • 人口眾多

  • 獨生子女政策:如何影響房子的幾何結(jié)構(gòu)?更多的臥室,更多的空間

我核心的想法是預(yù)測房價。然而,我不打算使用任何arima模型;相反,我將使用數(shù)據(jù)的特性逐年擬合回歸。

結(jié)構(gòu)如下:

  • 數(shù)據(jù)準(zhǔn)備:將數(shù)值特征轉(zhuǎn)換為分類;缺失值

  • EDA:對于數(shù)值特征和分類特征:平均價格與這些特征的表現(xiàn)

  • 建模:


    • 分割訓(xùn)練/測試給定年份的數(shù)據(jù):例如,在2000年分割數(shù)據(jù);根據(jù)這些數(shù)據(jù)訓(xùn)練回歸模型

    • 然后,在2016年之前的所有新年里,預(yù)測每套房子的價值。

    • 用于驗證的度量將是房屋的平均價格(即每年從測試樣本中獲得平均價格和預(yù)測值)

數(shù)據(jù)準(zhǔn)備

我們對特征有了非常完整的描述:

  • url:獲取數(shù)據(jù)(字符)的url

  • id:id(字符)

  • Lng:和Lat坐標(biāo),使用BD09協(xié)議。(數(shù)字)

  • Cid:社區(qū)id(數(shù)字)

  • 交易時間:交易時間(字符)

  • DOM:市場活躍日。(數(shù)字)

  • 關(guān)注者:交易后的人數(shù)。(數(shù)字)

  • 總價:(數(shù)值)

  • 價格:按平方計算的平均價格(數(shù)值)

  • 面積:房屋的平方(數(shù)字)

  • 起居室``數(shù)(字符)

  • 客廳``數(shù)(字符)

  • 廚房:廚房數(shù)量(數(shù)字)

  • 浴室數(shù)量(字符)

  • 房子高度

  • 建筑類型:包括塔樓(1)、平房(2)、板塔組合(3)、板(4)(數(shù)值)

  • 施工時間

  • 裝修:包括其他(1)、粗(2)、簡單(3)、精裝(4)(數(shù)值)

  • 建筑結(jié)構(gòu):包括未清(1)、混合(2)、磚和木(3)、磚混凝土(4)、鋼(5)和鋼-混凝土復(fù)合材料(6)(數(shù)值)

  • 梯梯比:同層居民數(shù)與電梯數(shù)量的比例。

  • 電梯有(1)或沒有電梯(0)(數(shù)值)

  • 五年期:業(yè)主擁有不到5年的財產(chǎn)(數(shù)字)

數(shù)據(jù)清理、特征創(chuàng)建

從最初的數(shù)據(jù)看:

  • 從網(wǎng)址上,我發(fā)現(xiàn)它有位置信息,如chengjiao/101084782030。同樣,一個簡單的regexp進(jìn)行省特征提取。

  • 另一個大的數(shù)據(jù)準(zhǔn)備工作是轉(zhuǎn)換一些數(shù)字特征,比如地鐵,地鐵站附近的房子編碼為1,相反的情況編碼為0。

  • 還有很大一部分DOM缺失。我既不能在建模中使用這個特性,也不能刪除NA,但它也會減小數(shù)據(jù)幀的大小。

#從網(wǎng)址中提取省份 ?sapply(df$url, function(x) strsplit(x,'/')[[1]][4])

檢查缺失

#缺失數(shù)據(jù)圖 ?ggplot(data = .,aes(x = V2, y = V1)) + geom_tile(aes(fill = value )) +

?

  • 如上所述,DOM的很大一部分丟失了。我決定先保留這個特性,然后用中間值來填充缺失的值(分布是非常傾斜的)

  • 否則,buildingType和communityAverage(pop.)中只有幾個缺少的值,我決定簡單地刪除這些值。事實上,它們只占了約30行,而整個數(shù)據(jù)集的數(shù)據(jù)量為300k+,因此損失不會太大。

  • 下面我簡單地刪除了我以后不打算使用的特征。

ifelse(is.na(df$DOM),median(df$DOM,na.rm=T),df$DOM)

點擊標(biāo)題查閱往期內(nèi)容

數(shù)據(jù)分享|R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測心臟病

左右滑動查看更多

01

02

03

04

用于將數(shù)字轉(zhuǎn)換為類別的自定義函數(shù)

對于某些特征,需要一個函數(shù)來處理多個標(biāo)簽,對于其他一些特征(客廳、客廳和浴室),轉(zhuǎn)換非常簡單。

df2$livingRoom?<-?as.numeric(df2$livingRoom)

似乎buildingType具有錯誤的編碼數(shù)字值:

buildingTypecount0.04840.12530.25020.33350.37510.42910.500150.66711.000845412.0001373.000597154.000172405NaN2021

由于錯誤的編碼值和NA的數(shù)量很少,因此我將再次丟棄這些行

df2$renovationCondition <- sapply(df2$renovationCondition, ionCondition) df2$buildingStructure <- sapply(df2$buildingStructure, makeStructure) df2$elevator <- ifelse(df2$elevator==1,'has_elevator','no_elevator')

缺失值檢察

# 缺失數(shù)據(jù)圖 df2 %>% is.na %>% melt %>% ?ggplot(data = .,aes(x = Var2, y = Var1)) + geom_tile(aes(fill = value)) + ?scale_fill_manual(values = c("grey20","white")) + theme_minimal(14) +

kable(df?%>% group_by(constructionTime) %>% summarise(count=n()) %>% arrange(-count) %>% head(5))constructionTimecount200421145200319409NA19283200518924200614854

?

df3?<-?data.frame(df2?%>%?na.omit())

插補(bǔ)后的最終檢查

any(is.na(df3))## [1] FALSE

探索性分析

由于有數(shù)字和分類特征,我將使用的EDA技術(shù)有:

  • 數(shù)值:相關(guān)矩陣

  • 分類:箱線圖和地圖

我們必須關(guān)注價格(單位價格/單位價格)以及總價格(百萬元)
totalPrice將是回歸模型的目標(biāo)變量。

數(shù)值特征

corrplot(cor( ?df3 ?, ?tl.col='black')

評論

  • totalPrice與communityAverage有很強(qiáng)的正相關(guān)關(guān)系,即人口密集區(qū)的房價較高

  • totalPrice與客廳、衛(wèi)浴室數(shù)量有一定的正相關(guān)關(guān)系。

  • 至于面積變量,我們看到它與上述變量也有很強(qiáng)的相關(guān)性:這是有道理的,因為如果房子的面積大,可以建造更多的房間(顯而易見)。

  • 其他一些有趣的相關(guān)性:communityAverage與建筑時間呈負(fù)相關(guān),這意味著在人口密集區(qū)建房所需的時間更短

分類特征

地圖

  • 中國三級(省)地圖

  • 我看了看城郊,它位于北京附近,所以我過濾了那個特定省份的地圖

ggplot() + ?geom_polygon(data = shapefile_test,aes(x = long, y = lat, group = group), BeijingLoc <- data.frame('Long'=116.4075,'Lat' = 39.904)

建筑結(jié)構(gòu)

makeEDA('buildingStructure'?)

磚木結(jié)構(gòu)的房屋是最昂貴的,幾乎是其他類型房屋的兩倍


點擊標(biāo)題查閱往期內(nèi)容

R語言用線性回歸模型預(yù)測空氣質(zhì)量臭氧數(shù)據(jù)

左右滑動查看更多

01

02

03

04



建筑類型

makeEDA('buildingType'?)

  • 平房是最昂貴的

裝修條件

電梯

  • 價格對電梯的依賴性非常小

  • 住宅的分布與這一特征是相對相等的。

地鐵

  • 價格對地鐵站附近的依賴性非常小。

  • 住宅的分布與這一特征是相對相等的。

是否滿_五年_

makeFeatureCatEDA('fiveYearsProperty',?length(unique(df3$fiveYearsProperty)))

  • 對于是否擁有不到5年房產(chǎn)來說,價格的依賴性確實很小

  • 就這一特征而言,房子的分布是相對平等的

區(qū)域

回歸模型

策略

  • 從tradeTime中提取年份和月份

  • 按年度和月份分組,得到房屋的數(shù)量和均價

  • 拆分?jǐn)?shù)據(jù)集:


    • 對于年[2010-2017]=在這組年上訓(xùn)練并運行回歸模型

    • 對于>2017年:逐月對測試樣本并預(yù)測平均價格

平均價格總覽

首先我們需要看看我們想要預(yù)測什么

df3$year <- year(df3$tradeTimeTs) df3$month <- month(df3$tradeTimeTs)df3 %>% filter(year>2009) %>% group_by(monthlyTrad) %>% ?summarise(count=n(), mean = mean(price)) %>% ?ggplot(aes(x=monthlyTradeTS, y= mean)) +

  • 平均價格上漲至2017年中期,然后迅速下降

  • 同時,房屋數(shù)量隨著價格的上漲而增加,而且現(xiàn)在房屋交易的數(shù)量也隨著價格的上漲而減少。

準(zhǔn)備訓(xùn)練/測試樣本

我在2017-01-01拆分?jǐn)?shù)據(jù)。對于所有樣本,我需要把分類特征變成偽變量。

df_train <- data.frame(df ?%>% filter(year>2009 & year<2017)) df_test <- data.frame(df %>% filter(year>=2017)) as.data.frame(cbind( ?df_train %>% select_if(is.numeric) %>% select(-Lng, -Lat, -year, -month), ?'bldgType'= dummy.code(df_train$buildingType), ?'bldgStruc'= dummy.code(df_train$buildingStructure), ?'renovation'= dummy.code(df_train$renovationCondition), ?'hasElevator'= dummy.code(df_train$elevator),

在這一步中,我只訓(xùn)練一個線性模型

regressors<-c('lm') Control <- trainControl(method = "cv",number = 5, repeats=3)for(r in regressors){ ? ?cnt<-cnt+1 ? ? res[[cnt]]<-train(totalPrice ~., data = train ,method=r,trControl = ?Control)


?r^2在0.88左右,不錯。讓我們看看細(xì)節(jié)。

訓(xùn)練精度

g1<-ggplot(data=PRED,aes(x=Prediction,y=True)) + geom_jitter() + geom_smooth(method='lm',size=.5) + ? ?#計算指標(biāo) ? ?mse <- mean((PRED$True-PRED$Prediction)^2) ? ?rmse<-mse^0.5 ? ?SSE = sum((PRED$Pred - PR

## [1]?"MSE: 15952.845934 RMSE : 126.304576 R2 :0.795874"

  • 所以看起來殘差還不錯(分布是正態(tài)的,以0為中心),但對于低價格來說似乎失敗了。

?訓(xùn)練和測試樣本的預(yù)測與時間的關(guān)系

  • 基本上與上述相同,但我將重復(fù)預(yù)測所有月份的訓(xùn)練數(shù)據(jù)

  • 我的目標(biāo)指標(biāo)是平均房價。

  • 訓(xùn)練是在10多年的訓(xùn)練樣本中完成的,因此逐月查看預(yù)測將非常有趣。

# 訓(xùn)練樣本->訓(xùn)練精度 for (i in 1:length(dates_train)){ ? ? current_df <- prepareDF(current_df) ? ? current_pred <- mean(predict(res[[1]],current_df)) #運行測試樣本-->測試精度 for (i in 1:length(dates_test)){ ? ? current_df <- prepareDF(current_df) ? ?current_pred <- mean(predict(res[[1]],current_df)) RES %>% reshape2::melt(id=c('date','split')) %>% ?ggplot(aes(x=date,y=value)) + geom_line(aes(color=variable, lty=split),size=1) +

  • 預(yù)測對于2012年之后的數(shù)據(jù)確實非常好,這可能與有足夠數(shù)據(jù)的月份相對應(yīng)

改進(jìn)

地理位置作為特征

  • 下面是一個有趣的圖;它顯示了每個位置的總價格。在二維分布的中心,價格更高。

  • 這個想法是計算每個房子到中心的距離,并關(guān)聯(lián)一個等級/分?jǐn)?shù)

BeijingLoc <- data.frame('Long'=116.4075,'Lat' = 39.904) df3 %>% ggplot(aes(x=Lng,y=Lat)) + geom_point(aes(color=price),size=.1,alpha=.5) ?+ ?theme(legend.position = 'bottom') +


本文摘選?《?R語言線性回歸和時間序列分析北京房價影響因素可視化案例?》?,點擊“閱讀原文”獲取全文完整資料。

點擊標(biāo)題查閱往期內(nèi)容

向量自回歸(VAR)模型分析消費者價格指數(shù) (CPI) 和失業(yè)率時間序列
Matlab用BUGS馬爾可夫區(qū)制轉(zhuǎn)換Markov switching隨機(jī)波動率模型、序列蒙特卡羅SMC、M H采樣分析時間序列
Matlab創(chuàng)建向量自回歸(VAR)模型分析消費者價格指數(shù) (CPI) 和失業(yè)率時間序列
Stata廣義矩量法GMM面板向量自回歸 VAR模型選擇、估計、Granger因果檢驗分析投資、收入和消費數(shù)據(jù)R語言時變向量自回歸(TV-VAR)模型分析時間序列和可視化
R語言用向量自回歸(VAR)進(jìn)行經(jīng)濟(jì)數(shù)據(jù)脈沖響應(yīng)研究分析
R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列
R語言VAR模型的不同類型的脈沖響應(yīng)分析
R語言隨機(jī)搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
R語言時變參數(shù)VAR隨機(jī)模型
R語言估計時變VAR模型時間序列的實證研究分析案例
R語言向量自回歸模型(VAR)及其實現(xiàn)
R語言實現(xiàn)向量自回歸VAR模型
R語言估計時變VAR模型時間序列的實證研究分析案例
Python和R用EWMA,ARIMA模型預(yù)測時間序列
R語言用LASSO,adaptive LASSO預(yù)測通貨膨脹時間序列
Python中的ARIMA模型、SARIMA模型和SARIMAX模型對時間序列預(yù)測
R語言arima,向量自回歸(VAR),周期自回歸(PAR)模型分析溫度時間序列
【視頻】Python和R語言使用指數(shù)加權(quán)平均(EWMA),ARIMA自回歸移動平均模型預(yù)測時間序列


線性回歸和時間序列分析北京房價影響因素可視化案例|附代碼數(shù)據(jù)的評論 (共 條)

分享到微博請遵守國家法律
桃源县| 都兰县| 尼勒克县| 普陀区| 社会| 济宁市| 师宗县| 赤水市| 靖州| 额尔古纳市| 松溪县| 思南县| 舒城县| 黄龙县| 长寿区| 浦县| 龙岩市| 延吉市| 舞钢市| 海城市| 荣成市| 彩票| 湛江市| 叶城县| 湘潭市| 靖西县| 庆安县| 云龙县| 神木县| 沙雅县| 财经| 克山县| 林西县| 海宁市| 根河市| 广宁县| 新蔡县| 会同县| 尉犁县| 文成县| 高要市|