乐趣区

关于人工智能:灰色-GM11模型在商品房销售价格预测中的应用

<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 多平台公布

退出移动版