精华内容
下载资源
问答
  • 财政收入影响因素分析及预测模型

    财政收入影响因素分析及预测模型

    背景

    在我国现行的分税制财政管理体制下,地方财政收入不仅是国家财政收入的重要组成部分,还具有其相对独立的构成内容。如何有效地利用地方财政收入,合理地分配来促进地方的发展,提高市民的收入和生活质量是每个地方政府需要考虑的首要问题。因此,对地方财政收入进行预测,不但是必要的,而且是可能的。科学、合理地预测地方财政收入,对于克服年度地方预算收支规模的随意性和盲目性,正确处理地方财政与经济的相互关系具有十分重要的意义。某市作为改革开放的前沿城市,其经济发展在全国经济中的地位举足轻重。目前,该市在财政收入规模、结构等方面与北京、深圳和上海等城市仍有一定差距,存在不断完善的空间。

    目标

    本案例旨在通过研究,发现影响该市目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他经济发展较快的城市提供借鉴。

    考虑到数据的可得性,本案例所用的财政收入分为地方一般预算收入和政府性基金收入。

    地方一般预算收入包括:1.税收收入,主要包括企业所得税和地方所得税中中央和地方共享的40%,地方享有的25%的增值税、营业税和印花税等;2.非税收入,包括专项收入、行政事业费收入、罚没收入、国有资本经营收入和其他收入等。政府性基金收入是国家通过向社会征收以及出让土地、发行彩票等方式取得的收入,并专项用于支持特定基础设施建设和社会事业发展的收入。由于1994年财政体制重大改革,所以1994年前后不具有可比性,仅对1994年后的进行分析,本案例数据来自《某市统计年鉴》(1995-2014)

    挖掘目标

    梳理影响地方财政收入的关键特征,分析、识别影响地方财政收入的关键特征的选择模型。结合目标1的因素分析,对某市2015年的财政总收入及各个类别收入进行预测。

    分析

    在以往的文献中,对影响财政收入的因素的分析大多采用普通最小二乘法来对回归模型的系数进行估计,预测变量的选取采用的则是逐步回归。然而,不论是最小二乘法还是逐步回归,都有其不足之处。它们一般都局限于局部最优解而不是全局最优解。如果预测变量过多,子集选择的计算过程具有不可实行性,且子集选择具有内在的不连续性,从而导致子集选择极度多变。

    Lasso是近年来被广泛使用于参数估计和变量选择的方法之一,并且在确定的条件下,使用Lasso方法进行变量选择已经被证明是一致的。案例选用Adaptive-Lasso方法来探究地方财政收入与各因素之间的关系。(该方法不在数学上具体叙述)

    在Adaptive-Lasso变量选择的基础上,鉴于灰色预测对小数据量数据预测的优良性能,对单个选定的影响因素建立灰色预测模型,得到它们在2014年及2015年的预测值。由于神经网络较强的适用性和容错能力,对历史数据建立训练模型,把灰色预测的数据结果代入训练好的模型中,就得到了充分考虑历史信息的预测结果,即2015年某市财政收入及各个类别的收入。

    下面是基于数据挖掘技术的财政收入分析预测模型流程

    1. 从某市统计局网站以及各统计年鉴搜集到该市财政收入以及各类别收入相关数据。
    2. 利用步骤1)形成的已完成数据预处理的建模数据,建立Adaptive-Lasso变量选择模型。
    3. 在步骤2)的基础上建立单变量的灰色预测模型以及人工神经网络预测模型。
    4. 利用步骤3)的预测值代入构建好的人工神经网络模型中,从而得到2014/2015年某市财政收入及各个类别的收入。

    处理过程

    • 数据获取
      • 已提供。
    • 数据探索
      • 描述分析
      • 相关分析
    • 数据预处理
      • 处理好的数据给出了。
    • 数据挖掘建模
      • Adaptive-Lasso变量选择模型
        • sklearn中Adaptive-Lasso模型已经删除了。
      • 财政收入及各类别收入预测模型
        • 某市财政收入预测模型
          • 真实值与预测值对比
        • 增值税预测模型
          • 真实值与预测值对比
        • 营业税预测模型
          • 真实值与预测值对比
        • 企业所得税预测模型
          • 真实值与预测值对比
        • 个人所得税预测模型
          • 真实值与预测值对比
        • 政府性基金收入预测模型
          • 真实值与预测值对比

    代码

    import pandas as pd
    import numpy as np
    from GM11 import GM11
    
    
    def adaptiveLasso():
        '''
        Adaptive-Lasso变量选择模型
        :return:
        '''
        inputfile = 'data/data1.csv'
        data = pd.read_csv(inputfile)
        # 导入AdaptiveLasso算法,要在较新的Scikit-Learn才有。
        from sklearn.linear_model import LassoLars
        model = LassoLars()
        model.fit(data.iloc[:, 0:13], data['y'])
        print(model.coef_)
    
    
    def huise():
        '''
        地方财政收入灰色预测
        :return:
        '''
        inputfile = 'data/data1.csv'
        outputfile = 'data/data1_GM11.xls'
        data = pd.read_csv(inputfile)
        data.index = range(1994, 2014)
    
        data.loc[2014] = None
        data.loc[2015] = None
        l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
        for i in l:
            f = GM11(data[i][np.arange(1994, 2014)].values)[0]
            # 2014年预测结果
            data[i][2014] = f(len(data) - 1)
            # 2015年预测结果
            data[i][2015] = f(len(data))
            data[i] = data[i].round(2)
    
        data[l + ['y']].to_excel(outputfile)
        print(data)
    
    
    def yuce():
        '''
        地方财政收入神经网络预测模型
        :return:
        '''
        inputfile = 'data/data1_GM11.xls'  # 灰色预测后保存的路径
        outputfile = 'data/revenue.xls'  # 神经网络预测后保存的结果
        modelfile = 'data/1-net.model'  # 模型保存路径
        data = pd.read_excel(inputfile)
        feature = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']  # 特征所在列
    
        data_train = data.loc[range(1994, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].values  # 特征数据
        y_train = data_train['y'].values  # 标签数据
    
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=6, units=12))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=12, units=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=10000, batch_size=16)  # 训练模型,学习一万次
        model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).values
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        data.to_excel(outputfile)
    
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    
    def adaptiveLasso2():
        '''
        Adaptive-Lasso变量选择
        :return:
        '''
    
        inputfile = 'data/data2.csv'  # 输入的数据文件
        data = pd.read_csv(inputfile)  # 读取数据
        # 导入AdaptiveLasso算法,新版本已经删除
        from sklearn.linear_model import AdaptiveLasso
        model = AdaptiveLasso(gamma=1)
        model.fit(data.iloc[:, 0:6], data['y'])
        model.coef_  # 各个特征的系数
    
    
    def huise2():
        '''
        增值税灰色预测
        :return:
        '''
        inputfile = 'data/data2.csv'  # 输入的数据文件
        outputfile = 'data/data2_GM11.xls'  # 灰色预测后保存的路径
        data = pd.read_csv(inputfile)  # 读取数据
        data.index = range(1999, 2014)
    
        data.loc[2014] = None
        data.loc[2015] = None
        l = ['x1', 'x3', 'x5']
        for i in l:
            f = GM11(data[i][np.arange(1999, 2014)].values)[0]
            data[i][2014] = f(len(data) - 1)  # 2014年预测结果
            data[i][2015] = f(len(data))  # 2015年预测结果
            data[i] = data[i].round(6)  # 保留六位小数
        data[l + ['y']].to_excel(outputfile)  # 结果输出
        print(data)
    
    
    def yuce2():
        '''
        增值税神经网络预测模型
        :return:
        '''
        inputfile = 'data/data2_GM11.xls'  # 灰色预测后保存的路径
        outputfile = 'data/VAT.xls'  # 神经网络预测后保存的结果
        modelfile = 'data/2-net.model'  # 模型保存路径
        data = pd.read_excel(inputfile)  # 读取数据
        feature = ['x1', 'x3', 'x5']  # 特征所在列
    
        data_train = data.loc[np.arange(1999, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].values  # 特征数据
        y_train = data_train['y'].values  # 标签数据
    
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=3, units=6))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=6, units=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=10000, batch_size=16)  # 训练模型,学习一万次
        model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).values
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        data[u'y_pred'] = data[u'y_pred'].round(2)
        data.to_excel(outputfile)
    
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    
    
    def adaptiveLasso3():
        '''
        Adaptive-Lasso变量选择
        :return:
        '''
        inputfile = 'data/data3.csv'  # 输入的数据文件
        data = pd.read_csv(inputfile)  # 读取数据
    
        # 导入AdaptiveLasso算法,要在较新的Scikit-Learn才有。
        from sklearn.linear_model import AdaptiveLasso
        model = AdaptiveLasso(gamma=1)
        model.fit(data.iloc[:, 0:10], data['y'])
        model.coef_  # 各个特征的系数
    
    
    def huise3():
        '''
        营业税灰色预测
        :return:
        '''
        inputfile = 'data/data3.csv'  # 输入的数据文件
        outputfile = 'data/data3_GM11.xls'  # 灰色预测后保存的路径
        data = pd.read_csv(inputfile)  # 读取数据
        data.index = range(1999, 2014)
    
        data.loc[2014] = None
        data.loc[2015] = None
        l = ['x3', 'x4', 'x6', 'x8']
        for i in l:
            f = GM11(data[i][np.arange(1999, 2014)].values)[0]
            data[i][2014] = f(len(data) - 1)  # 2014年预测结果
            data[i][2015] = f(len(data))  # 2015年预测结果
            data[i] = data[i].round()  # 取整
    
        data[l + ['y']].to_excel(outputfile)  # 结果输出
        print(data)
    
    
    def yuce3():
        '''
        营业税神经网络预测模型
        :return:
        '''
        inputfile = 'data/data3_GM11.xls'  # 灰色预测后保存的路径
        outputfile = 'data/sales_tax.xls'  # 神经网络预测后保存的结果
        modelfile = 'data/3-net.model'  # 模型保存路径
        data = pd.read_excel(inputfile)  # 读取数据
        feature = ['x3', 'x4', 'x6', 'x8']  # 特征所在列
    
        data_train = data.loc[range(1999, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].values  # 特征数据
        y_train = data_train['y'].values  # 标签数据
    
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=4, units=8))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=8, units=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=10000, batch_size=16)  # 训练模型,学习一万次
        model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).values
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        data[u'y_pred'] = data[u'y_pred'].round(2)
        data.to_excel(outputfile)
    
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    
    def adaptiveLasso4():
        '''
        Adaptive-Lasso变量选择
        :return:
        '''
        inputfile = 'data/data4.csv'  # 输入的数据文件
        data = pd.read_csv(inputfile)  # 读取数据
    
        # 导入AdaptiveLasso算法,要在较新的Scikit-Learn才有。
        from sklearn.linear_model import AdaptiveLasso
        model = AdaptiveLasso(gamma=1)
        model.fit(data.iloc[:, 0:10], data['y'])
        model.coef_  # 各个特征的系数
    
    
    def huise4():
        '''
        企业所得税灰色预测
        :return:
        '''
        inputfile = 'data/data4.csv'  # 输入的数据文件
        outputfile = 'data/data4_GM11.xls'  # 灰色预测后保存的路径
        data = pd.read_csv(inputfile)  # 读取数据
        data.index = range(2002, 2014)
    
        data.loc[2014] = None
        data.loc[2015] = None
        l = ['x1', 'x2', 'x3', 'x4', 'x6', 'x7', 'x9', 'x10']
        for i in l:
            f = GM11(data[i][np.arange(2002, 2014)].values)[0]
            data[i][2014] = f(len(data) - 1)  # 2014年预测结果
            data[i][2015] = f(len(data))  # 2015年预测结果
            data[i] = data[i].round(2)  # 保留两位小数
        data[l + ['y']].to_excel(outputfile)  # 结果输出
        print(data)
    
    
    def yuce4():
        '''
        企业所得税神经网络预测模型
        :return:
        '''
        inputfile = 'data/data4_GM11.xls'  # 灰色预测后保存的路径
        outputfile = 'data/enterprise_income.xls'  # 神经网络预测后保存的结果
        modelfile = 'data/4-net.model'  # 模型保存路径
        data = pd.read_excel(inputfile)  # 读取数据
        feature = ['x1', 'x2', 'x3', 'x4', 'x6', 'x7', 'x9', 'x10']  # 特征所在列
    
        data_train = data.loc[range(2002, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].values  # 特征数据
        y_train = data_train['y'].values  # 标签数据
    
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=8, units=6))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=6, units=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=5000, batch_size=16)  # 训练模型,学习五千次
        model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).values
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        data[u'y_pred'] = data[u'y_pred'].round()
        data.to_excel(outputfile)
    
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    
    def adaptiveLasso5():
        '''
        Adaptive-Lasso变量选择
        :return:
        '''
        inputfile = 'data/data5.csv'  # 输入的数据文件
        data = pd.read_csv(inputfile)  # 读取数据
    
        # 导入AdaptiveLasso算法,要在较新的Scikit-Learn才有。
        from sklearn.linear_model import AdaptiveLasso
        model = AdaptiveLasso(gamma=1)
        model.fit(data.iloc[:, 0:7], data['y'])
        model.coef_  # 各个特征的系数
    
    
    def huise5():
        '''
        个人所得税灰色预测
        :return:
        '''
        inputfile = 'data/data5.csv'  # 输入的数据文件
        outputfile = 'data/data5_GM11.xls'  # 灰色预测后保存的路径
        data = pd.read_csv(inputfile)  # 读取数据
        data.index = range(2000, 2014)
    
        data.loc[2014] = None
        data.loc[2015] = None
        l = ['x1', 'x4', 'x5', 'x7']
        for i in l:
            f = GM11(data[i][np.arange(2000, 2014)].values)[0]
            data[i][2014] = f(len(data) - 1)  # 2014年预测结果
            data[i][2015] = f(len(data))  # 2015年预测结果
            data[i] = data[i].round()  # 取整
    
        data[l + ['y']].to_excel(outputfile)  # 结果输出
        print(data)
    
    
    def yuce5():
        '''
        个人所得税神经网络预测模型
        :return:
        '''
        inputfile = 'data/data5_GM11.xls'  # 灰色预测后保存的路径
        outputfile = 'data/personal_Income.xls'  # 神经网络预测后保存的结果
        modelfile = 'data/5-net.model'  # 模型保存路径
        data = pd.read_excel(inputfile)  # 读取数据
        feature = ['x1', 'x4', 'x5', 'x7']  # 特征所在列
    
        data_train = data.loc[range(2000, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].values  # 特征数据
        y_train = data_train['y'].values  # 标签数据
    
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=4, units=8))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=8, units=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=15000, batch_size=16)  # 训练模型,学习一万五千次
        model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).values
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        data[u'y_pred'] = data[u'y_pred'].round()
        data.to_excel(outputfile)
    
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    
    def huise6():
        '''
        政府性基金收入灰色预测
        :return:
        '''
        x0 = np.array([3152063, 2213050, 4050122, 5265142, 5556619, 4772843, 9463330])
        f, a, b, x00, C, P = GM11(x0)
        print(u'2014年、2015年的预测结果分别为:\n%0.2f万元和%0.2f万元' % (f(8), f(9)))
        print(u'后验差比值为:%0.4f' % C)
        p = pd.DataFrame(x0, columns=['y'], index=range(2007, 2014))
        p.loc[2014] = None
        p.loc[2015] = None
        p['y_pred'] = [f(i) for i in range(1, 10)]
        p['y_pred'] = p['y_pred'].round(2)
        p.index = pd.to_datetime(p.index, format='%Y')
    
        import matplotlib.pylab as plt
        p.plot(style=['b-o', 'r-*'], xticks=p.index)
        plt.show()
    
    
    if __name__ == '__main__':
        # adaptiveLasso()
        # huise()
        # yuce()
        # adaptiveLasso2()
        # huise2()
        # yuce2()
        # adaptiveLasso3()
        # huise3()
        # yuce3()
        # adaptiveLasso4()
        # huise4()
        # yuce4()
        # adaptiveLasso5()
        # huise5()
        # yuce5()
        huise6()
    
    

    后续处理

    应用模型进行推理。

    补充说明

    案例参考书《Python数据分析与挖掘实战》,与原书有借鉴,但是较大改动代码,修复了原书一些旧版本代码错误,具体数据集和代码可以查看我的Github,欢迎star或者fork。再次补充,相关数据集的获取直接clone整个仓库即可。

    展开全文
  • 10 财政收入影响因素分析及预测模型

    万次阅读 多人点赞 2017-09-15 15:48:04
    4 10 财政收入影响因素分析及预测模型 10.1背景与挖掘目标  本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较...

    4 10 财政收入影响因素分析及预测模型

    10.1背景与挖掘目标

      本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较快的城市提供借鉴。本案例对1994-2013年财政收入以及相关因素的数据,数据来自统计年鉴。

    目标:

    (1) 梳理影响地方财政收入的关键特征,分析识别影响地方财政收入的关键特征的选择模型

    (2) 结合(1)的分析,对某市2015年财政总收入以及各个类别收入进行预测。

    10.2分析方法与过程

       本案例在已有的研究基础上运用Adaptive-Lasso变量选择方法来研究影响地方财政收入的因素。

       Lasso是在1996年提出的将参数估计与变量选择同时进行的一种正则化方法,参数估计被定义为如下:

     

    10.2.1 灰色预测与神经网络的组合模型

    在Lasso变量的选择基础上,鉴于灰色预测对小数据量数据预测的优良性能,对单个选定的因素建立灰色预测模型,得到他们在2014-2015年的预测值,由于神经网络较强的适应性和容错能力,对历史数据建立训练模型,把灰色预测的结果带入训练好的模型中,就得到了充分考虑历史信息的预测结果,即2015年某市财政收入及各个类别收入

    主要步骤如下:

    (1) 对数据进行预处理

    (2) 将预处理好的数据,建立Lasso变量选择模型

    (3) 在(2)的基础上建立单变量的灰色预测模型,以及人工神经网络预测模型

    (4) 在(3)的预测值带入建立好的人工神经网络模型中,从而得到2014、2015年某市财政收入以及各类别收入的预测值。

    10.2.2数据探索分析

    影响财政收入(y)的因素很多,经查阅资料选以下因素为自变量

    社会从业人数(x1)

    在岗职工工资总额(x2)

    社会消费品零售总额(x3)

    城镇居民人均可支配收入(x4)

    城镇居民人均消费性支出(x5)

    年末总人口(x6)

    全社会固定资产投入(x7)

    地区生产总值(x8)

    第一产业产值(x9)

    税收(x10)

    居民消费价格指数(x11)

    第三产业与第二产业产值比(x12)

    居民消费水平(x13)

    10.2.2.1描述性分析

       我们要对数据有个大体认识,要对其进行简单的描述性统计分析

    # encoding=utf-8
    #
    描述性分析
    import pandas as pd
    import numpy as np

    inputfile=
    'demo/data/data1.csv'
    outputfile='demo/tmp/datagaikuo.csv'
    data=pd.read_csv(inputfile)
    r=[data.min()
    ,data.max(),data.mean(),data.std()]#依次计算最小值、最大值、均值、标准差
    r=pd.DataFrame(r,index=['MIN','MAX','MEAN', 'STD']).T
    np.round(r
    ,2).to_csv(outputfile)#保留2位小数,并输出

     

    10.2.2.2相关性分析

    现在要分析一下因变量与解释变量之间的关系,它们之间是否存在相关性,下面来求一下相关系数。

    #相关系数
    np.round(data.corr(method='pearson'),2).to_csv('demo/tmp/datapearson.csv')

    从上图中的相关系数中我们可以发现居民消费价格指数(x11)与财政收入的线性关系不显著,而且呈现负相关,其余变量与财政收入呈高度正相关。

    这种表格的形式看起来不太直观,现在我们以图的形式进行可视化,首先要对数据进行0-1标准值化处理。

    #标准化处理
    dataNM=(data-data.min())/(data.max()-data.min())
    dataNM.to_csv(
    'demo/tmp/dataNM.csv')


    从图中我们可以看出x11总体呈下降趋势,与y呈负相关关系,而其他因变量都与y呈正相关关系。

    10.2.3模型构建

    10.2.3.1Lasso变量选择模型

    #Lasso变量选择
    from sklearn.linear_model import Lasso
    model=Lasso()
    model.fit(data.iloc[:
    ,0:13],data['y'])
    q=model.coef_
    #各特征的系数
    q=pd.DataFrame(q,index=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x12','x13']).T
    np.round(q
    ,4).to_csv('demo/tmp/dataLasso.csv')

     

    观察表格中的数据我们发现x11居民消费水平为0,也就是说该因素对财政收入的影响非常小,可以忽略不计。

    10.2.4财政收入及各类别收入预测模型

     (1)某市财政收入预测模型

    对Lasso变量选择方法识别的影响财政收入的因素建立灰色预测与神经网络的组合预测模型,其参数设置为误差精度0.0000001,学习次数为10000次,输入层神经元的个数为12(除x12之外)。

    #地方财政收入灰色预测
    from GM11 import GM11
    outputfile=
    'demo/tmp/data1_GM11.xls'
    data.index=range(1994,2014)#行索引
    data.loc[2014]=None
    data.loc[2015]=None
    l=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']
    for i in l:
        f=GM11(data[i][
    range(1994,2014)].as_matrix())[0]
        data[i][
    2014]=f(len(data)-1)
        data[i][
    2015]=f(len(data))
        data[i]=data[i].round(
    2)
    data[l+[
    'y']].to_excel(outputfile)

     


    预测出了这11个变量在2014和2015年的因变量,下面就要利用神经网络预测财政收入了。

    经过多次试验发现神经网络模型:输入层的节点为11,隐层节点为12,输出节点为1的效果较好,神经网络预测代码如下:

    #地方财政收入神经网络预测模型
    inputfile='demo/tmp/data1_GM11.xls'
    outputfile='demo/tmp/revenue.xls'
    modelfile='demo/tmp/1-net.model'
    data=pd.read_excel(inputfile)
    feature=[
    'x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']#特征所在列
    data_train=data.loc[range(1994,2014)].copy()#2014年前的建模数据
    data_mean=data_train.mean()
    data_std=data_train.std()
    data_train=(data_train-data_mean)/data_std
    #数据标准化
    x_train=data_train[feature].as_matrix()#特征数据
    y_train=data_train['y'].as_matrix()#标签数据
    from keras.models import Sequential
    from keras.layers.core import Dense,Activation
    model=Sequential()
    #建立模型
    model.add(Dense(input_dim=12,output_dim=12))
    model.add(Activation(
    'relu'))#激活函数
    model.add(Dense(input_dim=12,output_dim=1))
    model.compile(
    loss='mean_squared_error',optimizer='adam')#编译模型,目标函数是均方差
    model.fit(x_train,y_train,nb_epoch=10000,batch_size=16)#训练模型
    model.save_weights(modelfile)#保存模型
    #预测并还原结果
    x=((data[feature]-data_mean[feature])/data_std[feature]).as_matrix()
    data[
    u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
    data.to_excel(outputfile)
    #画出预测图
    import matplotlib.pyplot as plt
    p=data[[
    'y','y_pred']].plot(subplots=True,style=['b-o','r-*'])
    plt.show()

     


    当我们把y和y_pred放在一个图上的时候,发现它们“重合”,它们只是差别小而已……并没重合……这些差别我们可以观察具体数据看出,可见我们的模型预测效果还是ganggang滴!

     




    展开全文
  • 财政收入影响因素分析和预测模型

    千次阅读 2018-04-30 21:40:34
    描述:采用数据挖掘算法中人工神经网络算法,首先用Adaptive—Lasso方法找出相关性最大的因素,根据现有的数据建立神经网络模型,然后对未知属性做出预测。代码:import pandas as pd def Data_pro(feature,data): ...

    描述:采用数据挖掘算法中人工神经网络算法,首先用Adaptive—Lasso方法找出相关性最大的因素,根据现有的数据建立神经网络模型,然后对未知属性做出预测。

    代码:

    import pandas as pd
    
    def Data_pro(feature,data):
        data_train = data.loc[range(1994, 2014)].copy()  # 取2014年前的数据建模
        data_mean = data_train.mean()
        data_std = data_train.std()
        data_train = (data_train - data_mean) / data_std  # 数据标准化
        x_train = data_train[feature].as_matrix()  # 特征数据
        y_train = data_train['y'].as_matrix()  # 标签数据
        return data_mean,data_std,x_train,y_train
    
    def Build_Net(data,data_mean,data_std,x_train,y_train,feature):
        from keras.models import Sequential
        from keras.layers.core import Dense, Activation
    
        model = Sequential()  # 建立模型
        model.add(Dense(input_dim=6, output_dim=12))
        model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
        model.add(Dense(input_dim=12, output_dim=1))
        model.compile(loss='mean_squared_error', optimizer='adam')  # 编译模型
        model.fit(x_train, y_train, nb_epoch=10000, batch_size=16)  # 训练模型,学习一万次
        #model.save_weights(modelfile)  # 保存模型参数
    
        # 预测,并还原结果。
        x = ((data[feature] - data_mean[feature]) / data_std[feature]).as_matrix()
        data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
        print(data[u'y_pred'])
        return data
        #data.to_excel(outputfile)
        
    def Draw_result(data):
        import matplotlib.pyplot as plt  # 画出预测结果图
        p = data[['y', 'y_pred']].plot(subplots=True, style=['b-o', 'r-*'])
        plt.show()
    
    def main():
        inputfile = 'F:/Python/IDLE--python/BigDataAnalyze/chapter13-data/data1_GM11.xls'  # 灰色预测后保存的路径
        outputfile = '../data/revenue.xls'  # 神经网络预测后保存的结果
        modelfile = '../tmp/1-net.model'  # 模型保存路径
        feature = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']  # 特征所在列
        data = pd.read_excel(inputfile)  # 读取数据
        
        #数据处理,标准化,训练数据集
        data_mean, data_std, x_train, y_train = Data_pro(feature,data)
        
        #预测模型建立
        data = Build_Net(data,data_mean,data_std,x_train,y_train,feature)
        
        #画出预测结果图
        Draw_result(data)
    
    if __name__ == '__main__':
        main()

    展开全文
  • 数学基础-模型准确度影响因素

    千次阅读 2018-06-06 11:30:13
    我们在运用数据科学解决问题时必须清楚的理解问题、理解数据、掌握一系列方法,才能很好的解决问题。统计学习的对象是数据,数据的类型包括数字、...统计学习方法三要素包括:模型模型集合,概率模型表示为条件概...

    我们在运用数据科学解决问题时必须清楚的理解问题、理解数据、掌握一系列方法,才能很好的解决问题。

    统计学习的对象是数据,数据的类型包括数字、文字、图像、音频、视频以及他们的组合。统计学习关于数据的基本假设是同类数据具有一定的统计规律性,即同类数据具有相似的特征或者具有相同的分布特性。统计学习方法学习这种特征,将生成的模型用于数据的分类或预测。

    统计学习方法三要素包括:模型(模型集合,概率模型表示为条件概率P(Y/X)、非概率模型为决策函数Y=f(X)))、策略(评价准则,损失函数:度量一次预测的好坏)、算法(模型选择)。

    模型准确度影响因素:数据质量、数据科学家的水平。

    1、数据质量对模型准确度的影响

    训练数据的质量和数量通常是决定一个模型性能的最关键因素。一旦训练数据准备好,其他的事情就顺理成章了。当数据量过少时容易出现训练不足的问题,当数据量过多时容易出现过训练的问题,对于一个模式的样本数据集来说,它应该尽可能的包含该模式的各个种类,而且每个种类的样本数量以及在全部数据中所占的比例对于模型建立和评价至关重要。所以我们要尽最大的努力获取尽可能全面的数据。

    例如,在进行车辆故障检测时,发生故障状态较少,导致故障相关数据较少,就会存在故障建模数据不足,模型就不具备对未知故障的检测能力。如果某类故障的数据特别多,其他类故障的数据比较少会导致模型对数据少的故障检测能力较差,最好是各类别故障数据均衡。数据质量的提升依赖于车厂对长期持久运行的车辆数据的搜集。

    模型训练对数据量的需求取决于模型结构和参数个数,参加点击打开链接

    2、数据科学家的水平

    数据科学家的水平体现在领域知识和数据分析能力,数据分析能力包括:数据预处理、特征选择、模型选择、模型调参、模型验证,是数据工程师基于数据和目标进行的一系列工作,这就是普通的数据工程师跟大师级数据科学家的差距所在。成为大师级数据科学家是所有从事数据科学工作的人们的梦想。

    2.1 领域知识

    领域知识可以帮助我们更好的处理数据,建立更好的特征集,对于提升建模的效率和效果至关重要,丰富的领域知识是假设生成的基础,有关假设生成的意义请参考点击打开链接

    2.2 数据分析能力

    (1)数据预处理

    数据是多种多样的,包括数字、文本、图像、音频、视频等,不同的数据处理方法不同,数字类型数据包括分类型、数值型。数据预处理包括数据异常处理和数据变换。数据中存在三大类异常,包括错误数据、空缺值、离群点。不同类型数据的处理方法将在后续的文章中介绍。

    (2)特征工程

    特征工程是从现有数据中提取更多信息,特征工程包括特征转换、特征衍生、特征选择。特征工程将在后续的文章中介绍。

    (3)模型选择

    模型选择建立在对问题的理解、对数据的理解、对各种模型的理解的基础之上,结合经验和不断的尝试,以选择最适合的模型获得更高的准确率。模型选择将在后续的文章中介绍。

    (4)模型调参

    机器学习算法是由参数驱动的。这些参数对学习的结果有明显影响。参数调整的目的是为每个参数寻找最优值,以改善模型正确率。要调整这些参数,必须对它们的意义和各自的影响有所了解,遍历参数集合,观察训练过程输出,寻找最优参数。模型调参将在后续的文章中介绍。

    (5)模型评价

    使用交叉验证的方式来检验模型的准确度,交叉验证将数据集分为训练集、验证集、测试集,各类模型有其相应的评价指标。模型评价将在后续的文章中介绍。


    写博客的目的是学习的总结和知识的共享,如有侵权,请与我联系,我将尽快处理 














    展开全文
  • 项目为《Python 数据分析与挖掘实战》第 13 章:财政收入影响因素分析及预测模型。项目实现了因变量的筛选,阐述了灰色预测原理计算过程,实现了灰色预测和神经网络的结合模型
  • 并行计算模型有哪些

    万次阅读 2021-04-22 00:31:44
    并行计算模型通常指从并行算法的设计和分析出发,将各种并行计算机(至少是某一类并行计算机)的基本特征抽象出来,形成一个抽象的计算模型。 从更广的意义上说,并行计算模型为并行计算提供了硬件和软件界面,在该...
  • 在机器学习问题中,我们...前辈们做了很多深入的研究,尤其是回归问题的两类难点问题(多重共线性及特征选择),在此随笔中,我主要根据prml开篇对多项式曲线拟合的试验,讨论影响回归模型泛化能力的两种因素及处理...
  • 因素分析模型解决方法Finally, all data were cleansed and ready to analyze. Andy started overenthusiastically to visualize the data to get a first impression of the data. He had many dimensions and ...
  • Cox比例风险回归模型因素因素生存分析

    万次阅读 多人点赞 2020-03-13 12:00:20
    Cox比例风险回归模型因素因素生存分析 欢迎使用Markdown编辑器 Cox比例风险回归模型临床应用非常广泛,Cox分析得到的结果是可以直接运用到临床应用的,所以这个分析对癌症临床诊断非常关键的作用,检测高低...
  • 提到数据分析,肯定要提到数据分析模型,在进行数据分析之前,先搭建数据分析模型,根据模型中的内容,具体细分到不同的数据指标进行细化分析,最终得到想要的分析结果或结论。 一:数据分析模型 要进行一次完整的...
  • Python3中运行出现错误,故修改其中一小部分代码使其正常运行: 1、错误:KeyError:...Sequential 模型 - CSDN博客 tensorflow学习笔记--深度学习中的epochs,batch_size,iterations详解 - CSDN博客  
  • 项目成本管理包括确保在批准的预算范围内完成项目所需的各个...资源计划:项目经理要获得哪些资源、从哪里获得以及如何使用它们的过程。依据: 工作分解结构、项目进度计划、历史资料、项目范围说明书、项目资源说...
  • 常见的软件生存期模型主要瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型和统一过程六种。 (1)瀑布模型 优点:可强迫开发人员采用规范化的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段...
  • 本文是基于《Python数据分析与挖掘实战》的实战部分的第13章的数据——《财政收入影响因素分析及预测模型》做的分析。 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码。 在作者所给代码的基础上增加的...
  • 作者 | 微调(知乎ID微调,...具体的学习方法可以参考我最近的文章:机器学习门下,有哪些在工业界应用较多,前景较好的小方向?(https://www.zhihu.com/question/57072166/answer/280824223)该回答的第一部分(1)...
  • 笔者很早就对LDA模型着迷,最近在学习gensim库发现了LDA比较意义且项目较为完整的Tutorials,于是乎就本系列,本系列包含三款:Latent Dirichlet Allocation、Author-Topic Model、Dynamic Topic Models ...
  • 数据分析方法与模型有哪些

    千次阅读 2018-12-06 13:53:50
    现在的大数据的流行程度不用说大家都知道,大数据离不开数据分析,而数据分析的方法和数据分析模型多种多样,按照数据分析将这些数据分析方法与模型分为对比分析、分类分析、相关分析和综合分析四种方式,这四种方式...
  • SPSS(二)SPSS实现多因素方差分析模型因素方差分析上一篇博客https://blog.csdn.net/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑...
  • RNG k-e模型由Yakhot和Orzag提出.考虑了湍 流中涡流因素影响和低雷诺数效应,该模型在标准 k-e模型基础上附加一额外项,计算k和s,其输运方 程与标准k-e模型相似

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,579
精华内容 69,831
关键字:

影响因素模型有哪些