<center> 灰色 GM(1,1)模型在重庆商品房销售价格预测中的利用 </center>
<center>AdamCY888</center>
摘要:本文针对重庆市商品房价格预测问题,介绍了 GM(1,1)模型基本原理,利用 Python 程序设工具,建设 GM(1,1)灰色预测模型并进行预测,失去将来三年的预测价格并进行模型评估,从而为购房者提供决策。
关键词:GM(1,1)、重庆、商品房、销售价格、预测
@[TOC]
一、引言
我国的房地产市场已进入疾速倒退期间,如何采取有效的措施对商品房价格进行价格疏导,缩小或打消价格偏离导致的不利影响,是事关我国房地产行业可继续倒退的一个重要课题。因而,对商品房销售价格的正当剖析和精确预测成为事不宜迟。
重庆因为其独特的背景在全国各地的房价中处于“低价格”程度,在选择对象中具备钻研价值,选取灰色 GM(1,1)模型对重庆市区 2021、2022、2023 年商品房价格进行预测剖析,并拟合 2012-2020 年房价数据进行比照,测算其相对误差。
二、GM(1,1)模型基本原理
灰色零碎实践由我国学者邓聚龙等于 20 世纪 80 年代提出, 灰色零碎是指绝对于肯定的意识档次, 零碎外部的信息局部已知, 局部未知, 即信息不齐全的零碎。
灰色零碎实践认为, 因为各种环境因素对系统的影响, 使得体现零碎行为特色的离散数据呈现出离乱, 然而这一无规的离散序列是潜在的有规序列的一种体现, 零碎总是有其整体性能, 也就必然蕴含着某种外在法则。因此任何随机过程都可看作是在肯定时空区域变动的灰色过程, 随机量可看作是灰色量, 通过生成变换可将无规序列变成有规序列。
GM(1,1)模型的基本原理是基于原始数据逐渐变动个性,在数据处理过程中,对原始数列进行累加生成,可能生成具备指数增长法则的数列,通过建设一阶微分方程并对数据进行累减生成,即可失去预测数据。
2.1、模型的建设办法
(1)累加生成
将原始数列作为随机数列做一次累加,失去累加生成序列 $x_{i}^{(1)}(i=0,1,2,…n)$ 并且满足指数增长法则,因而,$x_{i}^{(1)}(i=0,1,2,…n)$ 满足一阶线性微分方程:
$$
\frac{\mathrm{d} X^{(1)}}{\mathrm{d}t}+aX^{(1)}=u
$$
其中,$t$ 代表工夫,$X^{(1)}$ 是工夫的函数。
(2)参数估计
$a$ 为待辨识参数,亦称倒退系数,利用最小二乘法求解其近似值。计 $u$ 为灰作用量,即待辨识内生变量,则:
$$
\hat{a}=(B^{T}B)^{-1}B^{T}y_{n}=\binom{a}{u}
$$
而后,将近似值代入原微分方程进行求解。其中:
$$
B=\begin{pmatrix}
-\frac{1}{2}(x_{1}^{(1)}+x_{2}^{(1)}) & 1 \\
-\frac{1}{2}(x_{2}^{(1)}+x_{3}^{(1)})& 1 \\
: & :\\
-\frac{1}{2}(x_{n-1}^{(1)}+x_{n}^{(1)}) & 1\\
\end{pmatrix}
$$
$$
y_{n}=\begin{bmatrix}
x_{2}^{(0)}\\
x_{3}^{(0)}\\
:\\
x_{n}^{(0)}\\
\end{bmatrix}
$$
(3)求解模型
对原微分方程求解,能够失去离散工夫响应函数,原微分方程的近似解为:
$$
X_{i+1}^{(1)}=[X_{i}^{(0)}-\frac{u}{a}]e^{-ai}+\frac{u}{a}
$$
(4)模型预测
若测验合格,则能够用模型进行预测。
计算出:
$$
X_{i+1}^{(2)}=X_{i+1}^{(1)}-X_{i}^{(1)},X_{i+2}^{(2)}=X_{i+2}^{(1)}-X_{i+1}^{(1)},…
$$
即失去 $X_{i+1}^{(0)},X_{i+2}^{(0)},…$ 的预测值。
2.2、模型根本特点
灰色零碎实践外围和根底的灰色模型 (GreyMode1), 简称 GM 模型, 概括而言具备以下 3 个特点:
(1) 建模所需信息较少, 通常只有有 4 个以上数据即可建模;
(2)不用晓得原始数据散布的先验特色, 对无规或不遵从任何散布的任意润滑离散的原始序列, 通过无限次的生成即可转化成为有规序列;
(3)建模的精度较高, 可放弃原零碎的特色, 能较好地反映零碎的理论情况。
本文选用灰色 GM(1,1)模型,并借助 Python 程序设计,使得对重庆房价进行预测钻研具备可行性。
三、房价预测模型的建设
3.1、原始数据的获取
重庆市区为四个直辖市之一,吸引着各地的眼光,外来人口一直减少,房地产行业也一直倒退,如何更好的把握商品房销售价格增长法则,对城市的倒退至关重要。以重庆市区 2012-2020 年商品房销售价格为例,对模型的灵敏性进行测验,通过“安居客”平台统计资料可查得相干数据。通过 Python 程序设计计算 GM(1,1)参数并进行拟合预测,代码见附录一。
3.2、模型的利用
依据灰色预测模型构建原理可得原始数据为:
$[6550, 6896, 6718, 6289, 7493,9925,12080,11187,11275]^{T}$
对原始数列进行累加,生成累加生成序列为:
$[6550, 13446, 20164, 26453, 33946, 43871, 55951, 67138, 78413]^{T}$
可求得参数 B 矩阵:
$$
B = \begin{bmatrix}
-9.99800e+03 & 1\\
-1.68050e+04 & 1\\
-2.33085e+04& 1\\
-3.01995e+04& 1\\
-3.89085e+04 & 1\\
-4.99110e+04 & 1\\
-6.15445e+04 & 1\\
-7.27755e+04 & 1
\end{bmatrix}
$$
$y$ 矩阵为:
$$ y= [6896,6718, 6289, 7493, 9925,12080,11187,11275]^{T}$$
将以上参数带入公式 GM(1,1)求解, 最小二乘预计参数为:
$a$ = -0.09682929,$b$ =4549.89922748 ,$b/a$ = -46988.87347486
将求解的 $a$、$b$ 数值带入公式, 能够失去 GM(1,1)模型的函数式将 2012-2020 年原始数据带入公式,即可求得绝对应的预测值。
3.3、房价预测及评估
模型通过对房价进行预测,求得 2021-2023 年重庆市区商品房销售价格预测值,以及 2012-2020 年的拟合值以及相对误差。
<center>2021-2023 年重庆市区商品房销售价格预测值(元 /m2)</center>
年份 | 2021 | 2022 | 2023 |
预测价格 | 13494 | 14849 | 16341 |
<center>2012-2020 年重庆市区商品房销售价格、测验值以及拟合相对误差 </center>
年份 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 |
理论价格 | 6550 | 6896 | 6718 | 6289 | 7493 | 9925 | 12080 | 11187 | 11275 |
拟合价格 | 6550 | 6275 | 6905 | 7599 | 8362 | 9202 | 10126 | 11143 | 12262 |
相对误差 | —— | -9.01% | 2.78% | 20.82% | 11.60% | -7.29% | -16.18% | -0.39% | 8.76% |
四、论断
(1)求得 2021、2022、2023 年的预测值
(2)从上述对于 2012-2020 年的拟合值中能够发现,其拟合值并不等于实在值,且相对误差有肯定稳定,模型成果个别。
(3)针对上述(2)尚需改良的中央在于对拟合后果进行测验,判断 GM(1,1)模型在本 问题钻研中拟合成果的低劣水平。
参考文献
[1]赵泰,迟建英. 灰色 GM(1,1)模型在商品房销售价格预测中的利用 [J]. 价值工程,2019.23(35):76—77
[2] 王全意. 重庆直辖以来城乡居民支出差距变化趋势预测[J]. 重庆理工大学学报(社会学科),2011,25(1):45—50
附录一
# 我的项目:实现 GM(1,1)模型,求解参数及预测拟合。#author:AdamCY888
import numpy as np
from math import e
m = 0
x0 = [6550, 6896, 6718, 6289, 7493,9925,12080,11187,11275]##2012-2020 年数据
x1 = list()
b = list()
for i in x0:
m += i
x1.append(m) ## x1 为 x0 的一次累加向量
for i in range(len(x0)-1):
b.append(list((-0.5*(x1[i]+x1[i+1]),1)))
B = np.mat(b) ## 高维列表转换为矩阵
Y = np.transpose(np.mat(x0[1:]))
a = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(B),B)),np.transpose(B)),Y)
z = a[1]/a[0]
print("一次累加序列矩阵为:\n",x1)
print("B 矩阵为:\n",B)
print("Y 矩阵为:\n",Y)
print("最小二乘预计参数为:\n",a)
print("a = %s,b = %s"%(a[0],a[1]))
print("b/a = %s\n"%z)
mmm = list()
for i in range(len(x0)+2):
A = (1-pow(e,float(a[0]))) * (x0[0] - z)*pow(e,-(float(a[0]))*(i+1) )
mmm.append(A)
print("%d 年的拟合值为 %s" %(2013+i,A))
for i in range(len(x0)-1):
AA = 100*abs(x0[i+1] - mmm[i])/x0[i+1]
print("%d 年相对误差为:%s"%(2013+i,AA))
本文由 mdnice 多平台公布