import numpy as np
import pandas as pd
以下是农民工收入的统计数据,使用历史年份对总体农民工,外出农民工,本地农民工分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;
统计局数据 2018年 2019年 2020年 2021年 2022年 2023年
农民工收入 全国 全国 全国 全国 全国 全国
总体农民工 3721 3962 4072 4432 4615
外出农民工 4107 4427 4549 5013 5240
本地农民工 3340 3500 3606 3878 4026
分别使用普通的线性模型,决策树回归模型,随机森林回归模型进行预测,顺便验证下不同模型输出的预测结果是否相同
### 数据准备
data = {'年份':[2018,2019,2020,2021,2022],
'总体农民工收入':[3721, 3962, 4072, 4432, 4615],
'外出农民工收入':[4107, 4427, 4549, 5013, 5240],
'本地农民工收入':[3340, 3500, 3606, 3878, 4026]}
df = pd.DataFrame(data = data)
df
年份 | 总体农民工收入 | 外出农民工收入 | 本地农民工收入 | |
---|---|---|---|---|
0 | 2018 | 3721 | 4107 | 3340 |
1 | 2019 | 3962 | 4427 | 3500 |
2 | 2020 | 4072 | 4549 | 3606 |
3 | 2021 | 4432 | 5013 | 3878 |
4 | 2022 | 4615 | 5240 | 4026 |
### 线性模型预测
from sklearn.linear_model import LinearRegression
# 创建并拟合线性回归模型
LR_regression_total = LinearRegression()
LR_regression_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])
LR_regression_outgoing = LinearRegression()
LR_regression_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])
LR_regression_local = LinearRegression()
LR_regression_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])
# 预测
pre_total = LR_regression_total.predict([[2023]])
pre_outgoing = LR_regression_outgoing.predict([[2023]])
pre_local = LR_regression_local.predict([[2023]])
# 打印结果
print("预测2023年的总体农民工收入:", pre_total)
print("预测2023年的外出农民工收入:", pre_outgoing)
print("预测2023年的本地农民工收入:", pre_local)
预测2023年的总体农民工收入: [4837.8]
预测2023年的外出农民工收入: [5522.8]
预测2023年的本地农民工收入: [4195.]
### 决策树模型预测
from sklearn.tree import DecisionTreeRegressor
# 创建并拟合线性回归模型
decision_tree_total = DecisionTreeRegressor()
decision_tree_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])
decision_tree_outgoing = DecisionTreeRegressor()
decision_tree_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])
decision_tree_local = DecisionTreeRegressor()
decision_tree_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])
# 预测
pre_total_dt = decision_tree_total.predict([[2023]])
pre_outgoing_dt = decision_tree_outgoing.predict([[2023]])
pre_local_dt = decision_tree_local.predict([[2023]])
# 打印结果
print("预测2023年的总体农民工收入:", pre_total_dt)
print("预测2023年的外出农民工收入:", pre_outgoing_dt)
print("预测2023年的本地农民工收入:", pre_local_dt)
预测2023年的总体农民工收入: [4615.]
预测2023年的外出农民工收入: [5240.]
预测2023年的本地农民工收入: [4026.]
### 随机森林模型预测
from sklearn.ensemble import RandomForestRegressor
# 创建并拟合线性回归模型
random_forest_total = RandomForestRegressor()
random_forest_total.fit(df['年份'].values.reshape(-1,1),df['总体农民工收入'])
random_forest_outgoing = RandomForestRegressor()
random_forest_outgoing.fit(df['年份'].values.reshape(-1,1),df['外出农民工收入'])
random_forest_local = RandomForestRegressor()
random_forest_local.fit(df['年份'].values.reshape(-1,1),df['本地农民工收入'])
# 预测
pre_total_rf = random_forest_total.predict([[2023]])
pre_outgoing_rf = random_forest_outgoing.predict([[2023]])
pre_local_rf = random_forest_local.predict([[2023]])
# 打印结果
print("预测2023年的总体农民工收入:", pre_total_rf)
print("预测2023年的外出农民工收入:", pre_outgoing_rf)
print("预测2023年的本地农民工收入:", pre_local_rf)
预测2023年的总体农民工收入: [4547.59]
预测2023年的外出农民工收入: [5150.87]
预测2023年的本地农民工收入: [3961.2]
结论:即使条件相同,不同模型的预测结果一般并不相同,之前我有个预测季度外出农民工的得到了相同的结果,要不就是数据量太少,或者很可能是哪里使用错误了
以下是农民工收入的统计数据,使用历史年份对东部地区,中部地区,西部地区,东北地区收入分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;
统计局数据 2018年 2019年 2020年 2021年 2022年
分四大区收入 全国 全国 全国 全国 全国
东部地区 3955 4222 4351 4787 5001
中部地区 3568 3794 3866 4205 4386
西部地区 3522 3723 3808 4078 4238
东北地区 3298 3469 3574 3813 3848
注意此处数据最好整理成一列是一个维度
### 数据准备
data2 = {
2018:[3955, 3568, 3522, 3298],
2019:[4222, 3794, 3723, 3469],
2020:[4351, 3866, 3808, 3574],
2021:[4787, 4205, 4078, 3813],
2022:[5001, 4386, 4238, 3848]
}
df2 = pd.DataFrame(data = data2,index = ['东部地区','中部地区','西部地区','东北地区'])
df2
2018 | 2019 | 2020 | 2021 | 2022 | |
---|---|---|---|---|---|
东部地区 | 3955 | 4222 | 4351 | 4787 | 5001 |
中部地区 | 3568 | 3794 | 3866 | 4205 | 4386 |
西部地区 | 3522 | 3723 | 3808 | 4078 | 4238 |
东北地区 | 3298 | 3469 | 3574 | 3813 | 3848 |
### 遇到上述情况不好直接训练,灵活使用转置调整数据格式
df2 = df2.transpose()
df2
东部地区 | 中部地区 | 西部地区 | 东北地区 | |
---|---|---|---|---|
2018 | 3955 | 3568 | 3522 | 3298 |
2019 | 4222 | 3794 | 3723 | 3469 |
2020 | 4351 | 3866 | 3808 | 3574 |
2021 | 4787 | 4205 | 4078 | 3813 |
2022 | 5001 | 4386 | 4238 | 3848 |
df2.index.values
array([2018, 2019, 2020, 2021, 2022], dtype=int64)
### 使用线性模型进行预测
from sklearn.linear_model import LinearRegression
# 准备特征列与目标列,'.values'方法将各列数据提取为NumPy数组
years = df2.index.values
east_income = df2['东部地区'].values
central_income = df2['中部地区'].values
west_income = df2['西部地区'].values
northeast_income = df2['东北地区'].values
# 创建并拟合线性回归模型
regression_east = LinearRegression()
regression_east.fit(years.reshape(-1, 1), east_income)
regression_central = LinearRegression()
regression_central.fit(years.reshape(-1, 1), central_income)
regression_west = LinearRegression()
regression_west.fit(years.reshape(-1, 1), west_income)
regression_northeast = LinearRegression()
regression_northeast.fit(years.reshape(-1, 1), northeast_income)
# 预测2023年的农民工收入
prediction_east = regression_east.predict([[2023]])
prediction_central = regression_central.predict([[2023]])
prediction_west = regression_west.predict([[2023]])
prediction_northeast = regression_northeast.predict([[2023]])
print("预测2023年的东部地区农民工收入:", prediction_east)
print("预测2023年的中部地区农民工收入:", prediction_central)
print("预测2023年的西部地区农民工收入:", prediction_west)
print("预测2023年的东北地区农民工收入:", prediction_northeast)
预测2023年的东部地区农民工收入: [5260.3]
预测2023年的中部地区农民工收入: [4577.9]
预测2023年的西部地区农民工收入: [4409.9]
预测2023年的东北地区农民工收入: [4033.6]
以下是农民工收入的统计数据,使用历史年份对制造业,建筑业,批发和零售业,交通运输仓储和邮政业,住宿餐饮业,居民服务修理和其他服务业 收入分别建立回归模型训练,并且对2023年的这几个维度的值进行预测;
统计局数据 2018年 2019年 2020年 2021年 2022年
分六大行业收入 全国 全国 全国 全国 全国
制造业 3732 3958 4096 4508 4694
建筑业 4209 4567 4699 5141 5358
批发和零售业 3263 3472 3532 3796 3979
交通运输仓储和邮政业 4345 4667 4814 5151 5301
住宿餐饮业 3148 3289 3358 3638 3824
居民服务修理和其他服务业 3202 3337 3387 3710 3874
import numpy as np
from sklearn.linear_model import LinearRegression
# 历史数据
years = np.array([2018, 2019, 2020, 2021, 2022])
manufacturing_income = np.array([3732, 3958, 4096, 4508, 4694])
construction_income = np.array([4209, 4567, 4699, 5141, 5358])
wholesale_retail_income = np.array([3263, 3472, 3532, 3796, 3979])
transportation_income = np.array([4345, 4667, 4814, 5151, 5301])
accommodation_food_income = np.array([3148, 3289, 3358, 3638, 3824])
service_income = np.array([3202, 3337, 3387, 3710, 3874])
# 创建并拟合线性回归模型
regression_manufacturing = LinearRegression()
regression_manufacturing.fit(years.reshape(-1, 1), manufacturing_income)
regression_construction = LinearRegression()
regression_construction.fit(years.reshape(-1, 1), construction_income)
regression_wholesale_retail = LinearRegression()
regression_wholesale_retail.fit(years.reshape(-1, 1), wholesale_retail_income)
regression_transportation = LinearRegression()
regression_transportation.fit(years.reshape(-1, 1), transportation_income)
regression_accommodation_food = LinearRegression()
regression_accommodation_food.fit(years.reshape(-1, 1), accommodation_food_income)
regression_service = LinearRegression()
regression_service.fit(years.reshape(-1, 1), service_income)
# 预测2023年的农民工收入
prediction_manufacturing = regression_manufacturing.predict([[2023]])
prediction_construction = regression_construction.predict([[2023]])
prediction_wholesale_retail = regression_wholesale_retail.predict([[2023]])
prediction_transportation = regression_transportation.predict([[2023]])
prediction_accommodation_food = regression_accommodation_food.predict([[2023]])
prediction_service = regression_service.predict([[2023]])
print("预测2023年的制造业农民工收入:", prediction_manufacturing)
print("预测2023年的建筑业农民工收入:", prediction_construction)
print("预测2023年的批发和零售业农民工收入:", prediction_wholesale_retail)
print("预测2023年的交通运输仓储和邮政业农民工收入:", prediction_transportation)
print("预测2023年的住宿餐饮业农民工收入:", prediction_accommodation_food)
print("预测2023年的居民服务修理和其他服务业农民工收入:", prediction_service)
预测2023年的制造业农民工收入: [4939.8]
预测2023年的建筑业农民工收入: [5656.4]
预测2023年的批发和零售业农民工收入: [4135.2]
预测2023年的交通运输仓储和邮政业农民工收入: [5574.4]
预测2023年的住宿餐饮业农民工收入: [3961.7]
预测2023年的居民服务修理和其他服务业农民工收入: [4017.1]