决策树预测成本价 2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题

时间:2022-07-22
本文章向大家介绍决策树预测成本价 2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

2020年第十届MathorCup高校数学建模挑战赛题目

A题 无车承运人平台线路定价问题

题目详情附件及完整源码下载请关注公众号“不太灵光的程序员”回复关键字“MC2020A”

对代码存在疑问,请在公众号留言,我会及时和您取得联系。

问题 3:建立关于线路定价的数学模型,给出附件2的线路任务的三次报价以及总成本定价。

分析过程

4、预测线路成本价

由于提供附件1 的数据只提供了总成本、第一次定价、调价比例和调价后的价格,没有说明调价后的价格是第几调价。

我们假定所给的调价后价格认为是第一次调价后的价格,给的调价比例看做是第一次调价的比例。

我们首先需要预测 线路总成本,然后预测 第一次调价 或者 第一次调价比例,我们才能在线路价格的基础上给出后两次报价。

构建和使用模型一般分为4步:

  • 定义模型:搞清楚要使用什么类型的模型。
  • 拟合模型:捕获数据集中所包含的模式,这一步是建模的核心步骤。
  • 模型评价:评价模型预测结果的好与差。
  • 预测结果:利用模型来输出预测结果。

我们所选的训练模型是决策树,训练 所选特征 和 线路总成本、第一次调价 间的关系。

利用scikit-learn库来创建模型。

r_tree = tree.DecisionTreeRegressor(random_state=1) # random_state 默认是0

对参数 random_state 赋予一个特定的值可以让模型每次运行的结果都是一致的。

你可以对它赋予任何数值,因为无论你选择什么数值,都不会对模型的质量产生本质影响。

from sklearn import tree
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.read_csv("car_new3.csv")

df_x = df[['总里程', '是否续签', '车辆长度', '车辆吨位', '地区', '需求紧急程度', '交易对象', '业务类型',
           '需求类型2', '省内/外']]

df_cost_y = df["线路总成本"]
df_price_y = df["线路价格"]
df_modify_y = df["调价比例"]

# 创建模型
r_cost_tree = tree.DecisionTreeRegressor(random_state=1)
r_price_tree = tree.DecisionTreeRegressor(random_state=1)
r_modify_tree = tree.DecisionTreeRegressor(random_state=1)

# 用 fit 训练模型
r_cost_tree.fit(df_x, df_cost_y)
r_price_tree.fit(df_x, df_price_y)   # 用 fit 训练模型,train_x, train_y 是第一步划分的数据集。
r_modify_tree.fit(df_x, df_modify_y)   # 用 fit 训练模型,train_x, train_y 是第一步划分的数据集。

# 用 score 测试模型 准确率
print('线路总成本 准确率:', r_cost_tree.score(df_x, df_cost_y))
print('线路价格 准确率:', r_price_tree.score(df_x, df_price_y))
print('调价比例 准确率:', r_modify_tree.score(df_x, df_modify_y))

我们对 线路总成本、 线路价格、 调价比例 分别进行训练,调价比例 的准确率太低了,我们还是使用 线路总成本、线路价格来做。

然后我们对待预测数据进行数据清洗,还不清楚的同学 先去看下《数据分析小白入门篇,mathorcup数学建模 A题 无车承运人平台线路定价问题,特征间的相关性分析》

取和训练数据集相同的特征进行预测,分别得到 线路总成本 和 第一次调整价格。

# 求 线路总成本 预测值
Y = r_cost_tree.predict(X)

end