摘要:本文针对重庆市商品房价格预测问题,介绍了GM(1,1)模型基本原理,利用Python程序设工具,建立GM(1,1)灰色预测模型并进行预测,得到未来三年的预测价格并进行模型评价,从而为购房者提供决策。
关键词:GM(1,1)、重庆、商品房、销售价格、预测
我国的房地产市场已进入快速发展时期,如何采取有效的措施对商品房价格进行价格引导,减少或消除价格偏离导致的不利影响,是事关我国房地产行业可持续发展的一个重要课题。因此,对商品房销售价格的合理分析和准确预测成为当务之急。
重庆由于其独特的背景在全国各地的房价中处于“低价格”水平,在选择对象中具有研究价值,选取灰色 GM(1,1)模型对重庆市区 2021、2022、2023 年商品房价格进行预测分析,并拟合2012-2020年房价数据进行对比,测算其相对误差。
灰色系统理论由我国学者邓聚龙等于 20 世纪 80 年代提出, 灰色系统是指相对于一定的认识层次,系统内部的信息部分已知, 部分未知, 即信息不完全的系统。
灰色系统理论认为, 由于各种环境因素对系统的影响, 使得表现系统行为特征的离散数据呈现出离乱, 但是这一无规的离散序列是潜在的有规序列的一种表现, 系统总是有其整体功能, 也就必然蕴含着某种内在规律。因而任何随机过程都可看作是在一定时空区域变化的灰色过程, 随机量可看作是灰色量, 通过生成变换可将无规序列变成有规序列。
GM(1,1)模型的基本原理是基于原始数据逐步变化特性,在数据处理过程中,对原始数列进行累加生成,能够生成具有指数增长规律的数列,通过建立一阶微分方程并对数据进行累减生成,即可得到预测数据。
(1)累加生成
将原始数列作为随机数列做一次累加,得到累加生成序列 x i ( 1 ) ( i = 0 , 1 , 2 , . . . n ) x_{i}^{(1)}(i=0,1,2,...n) xi(1)(i=0,1,2,...n) 并且满足指数增长规律,因此, x i ( 1 ) ( i = 0 , 1 , 2 , . . . n ) x_{i}^{(1)}(i=0,1,2,...n) xi(1)(i=0,1,2,...n) 满足一阶线性微分方程:
d X ( 1 ) d t + a X ( 1 ) = u \frac{\mathrm{d} X^{(1)}}{\mathrm{d}t}+aX^{(1)}=u dtdX(1)+aX(1)=u
其中, t t t 代表时间, X ( 1 ) X^{(1)} X(1)是时间的函数。
(2)参数估计
a a a 为待辨识参数,亦称发展系数,利用最小二乘法求解其近似值。计 u u u 为灰作用量,即待辨识内生变量,则:
a ^ = ( B T B ) − 1 B T y n = ( a u ) \hat{a}=(B^{T}B)^{-1}B^{T}y_{n}=\binom{a}{u} a^=(BTB)−1BTyn=(ua)
然后,将近似值代入原微分方程进行求解。其中:
B = ( − 1 2 ( x 1 ( 1 ) + x 2 ( 1 ) ) 1 − 1 2 ( x 2 ( 1 ) + x 3 ( 1 ) ) 1 : : − 1 2 ( x n − 1 ( 1 ) + x n ( 1 ) ) 1 ) 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} B=⎝⎜⎜⎜⎛−21(x1(1)+x2(1))−21(x2(1)+x3(1)):−21(xn−1(1)+xn(1))11:1⎠⎟⎟⎟⎞
y n = [ x 2 ( 0 ) x 3 ( 0 ) : x n ( 0 ) ] y_{n}=\begin{bmatrix} x_{2}^{(0)}\\ x_{3}^{(0)}\\ :\\ x_{n}^{(0)}\\ \end{bmatrix} yn=⎣⎢⎢⎢⎡x2(0)x3(0):xn(0)⎦⎥⎥⎥⎤
(3)求解模型
对原微分方程求解,可以得到离散时间响应函数,原微分方程的近似解为:
X i + 1 ( 1 ) = [ X i ( 0 ) − u a ] e − a i + u a X_{i+1}^{(1)}=[X_{i}^{(0)}-\frac{u}{a}]e^{-ai}+\frac{u}{a} Xi+1(1)=[Xi(0)−au]e−ai+au
(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}^{(2)}=X_{i+1}^{(1)}-X_{i}^{(1)},X_{i+2}^{(2)}=X_{i+2}^{(1)}-X_{i+1}^{(1)},... Xi+1(2)=Xi+1(1)−Xi(1),Xi+2(2)=Xi+2(1)−Xi+1(1),...
即得到 X i + 1 ( 0 ) , X i + 2 ( 0 ) , . . . X_{i+1}^{(0)},X_{i+2}^{(0)},... Xi+1(0),Xi+2(0),...的预测值。
灰色系统理论核心和基础的灰色模型(GreyMode1), 简称 GM 模型, 概括而言具有以下 3 个特点:
(1)建模所需信息较少, 通常只要有 4 个以上数据即可建模;
(2)不必知道原始数据分布的先验特征, 对无规或不服从任何分布的任意光滑离散的原始序列, 通过有限次的生成即可转化成为有规序列;
(3)建模的精度较高, 可保持原系统的特征, 能较好地反映系统的实际状况。
本文选用灰色 GM(1,1)模型,并借助Python程序设计,使得对重庆房价进行预测研究具有可行性。
重庆市区为四个直辖市之一,吸引着各地的眼光,外来人口不断增加,房地产行业也不断发展,如何更好的掌握商品房销售价格增长规律,对城市的发展至关重要。以重庆市区 2012-2020 年商品房销售价格为例,对模型的灵敏性进行检验,通过“安居客”平台统计资料可查得相关数据。通过Python程序设计计算GM(1,1)参数并进行拟合预测,代码见附录一。
根据灰色预测模型构建原理可得原始数据为:
[ 6550 , 6896 , 6718 , 6289 , 7493 , 9925 , 12080 , 11187 , 11275 ] T [ 6550, 6896, 6718, 6289, 7493,9925,12080,11187,11275]^{T} [6550,6896,6718,6289,7493,9925,12080,11187,11275]T
对原始数列进行累加,生成累加生成序列为:
[ 6550 , 13446 , 20164 , 26453 , 33946 , 43871 , 55951 , 67138 , 78413 ] T [6550, 13446, 20164, 26453, 33946, 43871, 55951, 67138, 78413]^{T} [6550,13446,20164,26453,33946,43871,55951,67138,78413]T
可求得参数B 矩阵:
B = [ − 9.99800 e + 03 1 − 1.68050 e + 04 1 − 2.33085 e + 04 1 − 3.01995 e + 04 1 − 3.89085 e + 04 1 − 4.99110 e + 04 1 − 6.15445 e + 04 1 − 7.27755 e + 04 1 ] 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} B=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−9.99800e+03−1.68050e+04−2.33085e+04−3.01995e+04−3.89085e+04−4.99110e+04−6.15445e+04−7.27755e+0411111111⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
y y y矩阵为:
y = [ 6896 , 6718 , 6289 , 7493 , 9925 , 12080 , 11187 , 11275 ] T y= [6896,6718, 6289, 7493, 9925,12080,11187,11275]^{T} y=[6896,6718,6289,7493,9925,12080,11187,11275]T
将以上参数带入公式 GM(1,1)求解,最小二乘估计参数为:
a a a = -0.09682929, b b b =4549.89922748 , b / a b/a b/a = -46988.87347486
将求解的 a a a、 b b b 数值带入公式,可以得到 GM(1,1)模型的函数式将 2012-2020 年原始数据带入公式,即可求得相对应的预测值。
模型通过对房价进行预测,求得 2021-2023 年重庆市区商品房销售价格预测值,以及2012-2020 年的拟合值以及相对误差。
年份 | 2021 | 2022 | 2023 |
预测价格 | 13494 | 14849 | 16341 |
年份 | 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))