用到的数据:
汽车销售数据:https://pan.baidu.com/s/1VlTy4nfvgXdDzgimVguZMg

1 分析数据

1.1 导包,读取数据

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression 
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error,r2_score
data = pd.read_csv('data.csv')
data.head()
券代码日期传统汽车销量国内生产总值当季值(亿元)x1汽油价格(元/吨)x2人民币贷款基准利率%x3汽车总产量(万辆)x4公路里程数汽车整车股票指数消费者信心指数
0652003年Q1102.129825.530205.49102.1177.63751696.8197.700000
1642003年Q2110.032537.330205.49110.0178.75501912.5487.666667
2632003年Q3112.135291.929205.49112.1179.87251803.7192.333333
3622003年Q4122.839767.430105.49122.8180.99001922.4894.666667
4612004年Q1131.134544.632105.49131.1182.51251930.7195.333333
data.shape
(65, 10)

1.2 查看是否有缺失值

data.isnull().sum()
券代码                0
日期                 0
传统汽车销量             0
国内生产总值当季值(亿元)x1    0
汽油价格(元/吨)x2        0
人民币贷款基准利率%x3       0
汽车总产量(万辆)x4        0
公路里程数              1
汽车整车股票指数           0
消费者信心指数            0
dtype: int64

公路里程数有一个缺失值,用均值填充

data['公路里程数']=data['公路里程数'].fillna(data['公路里程数'].mean())

1.3 分析数据之间的相关性

利用pandas分析其相关关系,为便于查看,只显示矩阵的上侧:

cormatrix = data.corr() 
cormatrix *= np.tri(*cormatrix.values.shape,k=-1).T
cormatrix
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
券代码传统汽车销量国内生产总值当季值(亿元)x1汽油价格(元/吨)x2人民币贷款基准利率%x3汽车总产量(万辆)x4公路里程数汽车整车股票指数消费者信心指数
券代码0.0-0.943772-0.983360-0.7300000.434063-0.950615-0.907244-0.833242-0.865064
传统汽车销量-0.00.0000000.9266780.738939-0.3929450.9991440.8818980.8197300.806348
国内生产总值当季值(亿元)x1-0.00.0000000.0000000.703095-0.4646620.9374530.8653110.8077990.868392
汽油价格(元/吨)x2-0.00.0000000.0000000.000000-0.0597200.7332780.7845300.5523300.609621
人民币贷款基准利率%x30.0-0.000000-0.000000-0.0000000.000000-0.410893-0.165263-0.388479-0.539812
汽车总产量(万辆)x4-0.00.0000000.0000000.000000-0.0000000.0000000.8788150.8206300.822135
公路里程数-0.00.0000000.0000000.000000-0.0000000.0000000.0000000.8245520.724907
汽车整车股票指数-0.00.0000000.0000000.000000-0.0000000.0000000.0000000.0000000.735544
消费者信心指数-0.00.0000000.0000000.000000-0.0000000.0000000.0000000.0000000.000000

从以上数据可以看出:

  1. "券代码"是数据的序号,应该去掉,
  2. "日期"是汽车销量没有线性关系,也直接去除
  3. 汽车的是根据汽车的销售量而定,汽车的生产量不能做为汽车销售量的预测特征,因此也舍弃。

因此初步筛选,以下特征进行建模:

X = data[['国内生产总值当季值(亿元)x1', '汽油价格(元/吨)x2', '人民币贷款基准利率%x3','公路里程数', '汽车整车股票指数', '消费者信心指数']]
Y = data['传统汽车销量']
X.head()
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
国内生产总值当季值(亿元)x1汽油价格(元/吨)x2人民币贷款基准利率%x3公路里程数汽车整车股票指数消费者信心指数
029825.530205.49177.63751696.8197.700000
132537.330205.49178.75501912.5487.666667
235291.929205.49179.87251803.7192.333333
339767.430105.49180.99001922.4894.666667
434544.632105.49182.51251930.7195.333333

1.4 划分训练集和测试集

x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size = 0.2,random_state = 66)

2 标准化处理

ss = StandardScaler()
ss.fit(x_train)
x_train_ss = ss.transform(x_train)
x_test_ss = ss.transform(x_test)

3 构建模型

训练

#构建模型
lr = LinearRegression()
lr.fit(x_train_ss,y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

预测

y_pred = lr.predict(x_test_ss)
 
#输出mse值
mean_squared_error(y_test,y_pred)
5017.725895684722
#输出R平方值
r2_score(y_test,y_pred)
0.8875379565909532
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐