基于Python预测出租车出行费用(Taxi trip fare prediction)

本文通过Python对Kaggle中的Taxitripfareprediction数据集进行分析,构建预测费用总和的模型。首先进行数据预处理和可视化,然后使用线性回归、决策树和神经网络模型进行建模。经过比较,最优模型为神经网络模型,具有较低的MSE和MAPE误差。此外,文章还讨论了模型的过拟合检测和参数调优过程。
摘要由CSDN通过智能技术生成

        本文将通过Python对Kaggle中的数据集进行分析。本文会包含所有代码,尽可能多的使用有关可视化的函数以及数据分析的模型。  

一、项目简介

1.1 数据集简介

数据集来源:本文基于Kaggle的数据集,链接:Taxi trip fare prediction | Kaggle

数据集内容:下图为原文中的介绍

中文说明:

 trip_duration 行驶时间
distance_traveled 行驶距离
num_of_passengers 乘客数量
fare 行驶费用
tip 司机小费
miscellaneous_fees 额外费用
total_fare 费用总和
surge_applied 动态定价

1.2研究内容

        预测费用总和。在实际应用上,可以与打车平台合作,用户给定目的地、出发时间、乘客人数。通过知道行车距离、预计的行驶时间、乘客人数来预测行车费用返回给用户,用户可根据预测的行车费用来确定是否打车。

二、数据处理与可视化

2.1 数据预处理

2.1.1 导包

包含数据处理与可视化的所有包,其中可视化中文代码根据自己情况编写,这里是苹果系统

#导包
import pandas as pd
#可视化
import matplotlib.pyplot as plt
import seaborn as sns
#可视化中文
from matplotlib import font_manager
plt.rcParams['font.sans-serif']=['Heiti TC']

2.1.2 导入数据

登录上文中的网站下载原始数据集。

文件初始状态:

用过Pandas包的方法导入原文件

#导入原文件
data = pd.read_csv('train.csv')

2.1.3 数据清洗

使用Pandas中针对DateFrame中的分析函数

#数据集概括
data.info()

由输出结果,我们可以发现一共有209673行数据且没有空值

data.describe()

         为了后文更加清楚,我将列名转化为了中文,这里大家自由选择即可,如果没有转化下文中涉及到列名的记得自己变换

#列名转中文
names = ['行驶时间','行驶距离','乘客数量','行驶费用','司机小费','额外费用','费用总和','动态定价']
data.columns = names
data

 2.2 数据可视化

为了后文构建模型更加准确,这里我们先进行数据可视化观察数据的大致特征

我们先简单查看我们需要预测的费用总和的情况

#描述统计
data['费用总和'].describe()

  绘制费用总和的直方图查看分布情况,bins设置柱子(箱子)的数量

#费用总和
plt.hist(data['费用总和'],bins = 50)
plt.show()

 由于数据中存在远超均值的数据,导致X轴拉伸过长,无法精确观察数据

#划分
df = data[data['费用总和'] < 800]
df['费用总和'].describe()

这里我们用800划分,可以发现数量变为了209320个,少了300多个数据,对数据整体影响不大

plt.hist(df['费用总和'], bins=30)
plt.xlabel('费用总和')
plt.title('费用总和(小于800)')
plt.show()

这里我们可以发现费用总和集中在0-200之间

        按照相同的方法,可绘制其他变量的分布情况,有些变量存在极大的数值,例如上文中的费用总和,可进行筛选后绘图来绘制出更清楚的图。

三、模型构建

        通过查看数据集,我们可以发现费用总和等于行驶费用+司机小费+额外费用,因此我们的问题转换为预测行驶费用。此外,由于数据集数量过大(20w条),因此我这里只选择前2000条,大家可以根据自己情况进行选择,数据量越大后文模型计算时间越长。

data = data[0:2000]

3.1 模型构造准备

3.1.1 评估指标

        均方误差

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值