当前位置: 首页 > news >正文

机器学习 | 基于回归模型的交通需求预测案例分析及代码示例

交通需求预测是交通规划和管理的重要方面。准确的需求预测可实现高效的资源分配、改进的服务规划和提高的客户满意度。回归分析是一种建立变量之间关系模型的统计方法,广泛用于预测交通需求。本文探讨了基于回归模型在交通需求预测中的方法、挑战和应用。

了解交通需求预测

交通需求预测是根据历史数据和各种影响因素来估计未来对交通服务的需求。它对于优化公共交通系统中的路线、调度和资源分配至关重要。准确的预测可以节省成本,提高服务质量和更好的基础设施规划。

影响交通需求的主要因素

影响交通需求的因素有几个,其中包括:

  • 经济指标:以国内生产总值或地区产出衡量的经济增长对交通需求有重大影响。经济衰退可以减少需求,而增长可以增加需求。

  • 人口因素:人口规模、年龄分布和城市化水平影响交通需求。人口密度高的城市地区通常公共交通使用率较高。

  • 交通基础设施:交通基础设施的可用性和质量,如公路,铁路和公共交通系统,影响需求。改善基础设施可以通过提供更好的服务质量来吸引需求。

  • 技术进步:交通技术的创新,如智能交通系统,可以通过提高服务效率和可靠性来影响需求。

  • 社会和文化因素:文化事件,假期和社会行为影响交通模式。例如,高峰出行时间往往与节假日或重大活动相吻合。

回归分析在交通需求预测中的作用

回归分析是一种强大的统计工具,用于模拟和理解因变量(在这种情况下,通过销售座位数衡量的交通需求)与一个或多个自变量(如旅行日期,旅行时间,出发地,目的地,车辆类型等)之间的关系。

它使交通规划者和数据科学家能够识别历史数据中的模式,并使用这些模式来预测未来的需求。

为什么是回归分析?

交通需求预测中回归分析的必要性源于其以下能力:

  1. 量化关系:回归有助于量化交通需求与各种影响因素(如旅行时间、路线、支付方式和车辆类型)之间的关系。
  2. 捕获趋势:它可以识别历史数据中的趋势和模式,例如高峰出行时间、热门路线或假期和周末对需求的影响。
  3. 提供预测能力:通过建立将需求与关键变量联系起来的数学模型,回归分析可以准确预测未来的交通需求。
  4. 模型复杂性:在简单的情况下,线性回归就足够了。然而,交通需求往往受到变量之间非线性关系的影响(例如,高峰时段对需求的影响可能不会线性增加)。这就是更高级的回归模型,如随机森林,梯度提升或XGBoost变得有用的地方。这些模型捕捉了特征之间更复杂的交互。

回归模型在交通需求预测中的应用

为了建立一个实用的交通需求预测模型,我们将遵循一个结构化的方法。

问题陈述

目标是使用XX历史数据预测特定路线、日期和时间每次乘车的售出座位数量。这一预测将有助于优化XX内公共交通的资源配置和改善服务规划。

模型的方法

数据集包括 ride_id、seat_number、payment_method、travel_date、travel_time、travel_from、travel_to、car_type 和 max_capacity 等变量。我们的目标是使用这些功能来预测已售出的座位数 (seat_number)。

构建模型的步骤:

  • 数据预处理:
    特征工程:创建新特征,例如星期几、小时或日期是周末还是假日。
    处理分类变量:使用独热编码或标签编码将分类变量(如payment_method、travel_from、travel_to和car_type)转换为数值表示。
    处理日期:从travel_date和travel_time中提取有用的信息(例如,日、月、小时)。
    规范化/标准化:标准化max_capacity等特性,以提高模型性能。

  • 建模:
    训练-测试拆分:将数据拆分为训练集和测试集,以评估模型性能。
    模型选择:从简单的回归模型(如线性回归)开始,然后探索更复杂的模型(如随机森林,梯度提升或XGBoost)以捕获非线性关系。

  • 模型评估:使用适当的指标评估模型的性能。

具体代码及实现步骤示例

步骤1:导入必要库及数据加载

让我们创建一个合成数据集,该数据集类似于用于预测每次乘坐的座位数量的结构。该数据集将包括ride_id、seat_number、payment_method、travel_date、travel_time、travel_from、travel_to、car_type和max_capacity等特征。

import numpy as np
import pandas as pd
from datetime import timedelta, datetime# Set random seed for reproducibility
np.random.seed(42)# Parameters
n_samples = 10000  # Number of rides
locations = ['Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E']
car_types = ['bus', 'minibus', 'van']
payment_methods = ['cash', 'mobile_payment', 'card']
start_date = datetime(2024, 1, 1)# Generate data
ride_ids = np.arange(1, n_samples + 1)
travel_dates = [start_date + timedelta(days=np.random.randint(0, 365)) for _ in range(n_samples)]
travel_times = [datetime(2024, 1, 1, np.random.randint(0, 24), np.random.randint(0, 60)).time() for _ in range(n_samples)]
travel_from = np.random.choice(locations, n_samples)
travel_to = np.random.choice(locations, n_samples)
car_type = np.random.choice(car_types, n_samples)
max_capacity = np.random.choice([14, 30, 50], n_samples)
payment_method = np.random.choice(payment_methods, n_samples)# Calculate seat_number based on some logic
# Example logic: Bus type, capacity, time of day, and payment method affect seat_number
seat_number = (np.random.poisson(lam=10, size=n_samples) + (max_capacity / 2).astype(int) + np.random.randint(0, 5, n_samples)- (np.array([t.hour for t in travel_times]) // 3)+ (payment_method == 'mobile_payment').astype(int) * 5).clip(1, max_capacity)  # Ensure seat_number is between 1 and max_capacity# Create the DataFrame
data = pd.DataFrame({'ride_id': ride_ids,'travel_date': travel_dates,'travel_time': travel_times,'travel_from': travel_from,'travel_to': travel_to,'car_type': car_type,'max_capacity': max_capacity,'payment_method': payment_method,'seat_number': seat_number
})data.to_csv("train_revised.csv", index=False)
data.head()

输出

    ride_id    travel_date    travel_time    travel_from    travel_to    car_type    max_capacity    payment_method    seat_number
0    1    2024-04-12    17:29:00    Location_E    Location_E    van    50    cash    38
1    2    2024-12-14    11:47:00    Location_E    Location_D    bus    30    mobile_payment    27
2    3    2024-09-27    04:19:00    Location_B    Location_B    van    14    card    14
3    4    2024-04-16    11:20:00    Location_E    Location_D    bus    30    cash    28
4    5    2024-03-12    10:08:00    Location_A    Location_E    minibus    50    cash    36

步骤2:数据处理(特征工程)

# Feature Engineering
data['travel_date'] = pd.to_datetime(data['travel_date'])
data['day_of_week'] = data['travel_date'].dt.dayofweek
data['month'] = data['travel_date'].dt.month
data['hour'] = pd.to_datetime(data['travel_time']).dt.hour# Drop irrelevant columns
X = data.drop(columns=['ride_id', 'seat_number', 'travel_date', 'travel_time'])
y = data['seat_number']# Handling Categorical Variables and Scaling
categorical_features = ['payment_method', 'travel_from', 'travel_to', 'car_type']
numerical_features = ['max_capacity', 'day_of_week', 'month', 'hour']categorical_transformer = OneHotEncoder(drop='first')
numerical_transformer = StandardScaler()preprocessor = ColumnTransformer(transformers=[('num', numerical_transformer, numerical_features),('cat', categorical_transformer, categorical_features),]
)

步骤3:构建模型

这里,使用了一个随机森林模型,也可自行选择其他模型测试。

# Train-Test Split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Pipeline for the model
pipeline = Pipeline(steps=[('preprocessor', preprocessor),('model', RandomForestRegressor(random_state=42))
])
pipeline.fit(X_train, y_train)

步骤4:模型的预测和评估

# Predict on the test set
y_pred = pipeline.predict(X_test)# Evaluate the model
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print(f"Mean Squared Error (MSE): {mse}")
print(f"R-squared (R²): {r2}")

输出

Mean Squared Error (MSE): 8.306493985761055
R-squared (): 0.9101232043264215

回归分析在模型中的应用

在模型构建中,将回归分析应用于票务数据集,以预测特定设施的座位销售数量。以下是回归分析如何发挥核心作用:

  1. 识别关键变量:回归分析有助于确定哪些特征(例如,旅行时间、路线、车辆类型)最强烈地影响售出的座位数量。例如,从高需求位置或特定旅行时间(例如,早上高峰时间)可能更有可能有更多的座位出售。
  2. 建模需求模式:使用回归技术,您的模型可以从历史数据中学习需求模式,这些数据可能包括每日、每周或季节性趋势。例如,需求可能会在周末或假期上升,回归模型可以通过结合基于时间的特征来捕获。
  3. 预测未来需求:一旦模型经过训练,它就可以根据日期、时间和路线等已知因素预测未来设施的座位数量。这些预测使交通公司能够通过在高需求路线上安排额外的车辆或调整时间表以匹配预测的需求来有效地分配资源。
  4. 评估模型性能:可以使用均方误差(MSE)和R平方(R²)得分等指标来评估回归模型。这些指标有助于评估模型与数据的拟合程度以及预测需求的准确性。在模型中,0.91的R平方表示回归模型解释了售出座位数的91%的方差,这非常适合预测交通需求。

总结

交通需求预测是优化交通规划和资源管理的重要工具。通过回归分析,预测模型可以利用历史数据和关键影响因素准确预测未来需求。通过采用结构化的方法进行数据预处理、特征工程和模型选择,交通规划人员可以提高服务质量,提高运营效率,更好地满足乘客需求。

相关文章:

  • 【工具】scMultiMap基于单细胞多模态数据实现增强子与靶基因的细胞类型特异性映射
  • 基于STM32、HAL库的TSC2046IPWR触摸屏控制器驱动程序设计
  • 【同局域网/内网环境 Windows 远程桌面连接】
  • 动手学深度学习11.10. Adam算法-笔记练习(PyTorch)
  • Pacman-Multi-Agent Search
  • 深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
  • AiCube 试用 - ADC 水位监测系统
  • 如何培养团队的责任感与归属感
  • 多节点同步协同电磁频谱监测任务分配方法简要介绍
  • 【vue3】购物车实战:从状态管理到用户体验的全流程实现
  • 测量电机的电阻、电感、磁链常数和极对数办法
  • Go语言之路————指针、结构体、方法
  • Python 基础核心知识
  • (done) 吴恩达版提示词工程 6. 转换 (翻译,通用翻译,语气风格变换,文本格式转换,拼写检查和语法检查)
  • javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
  • 2025-4-25 情绪周期视角复盘(mini)
  • view、reshape、resize 的区别
  • 简单的 shell 程序
  • 前端-介绍一个好用的波浪背景生成器
  • LeetCode热题100--438.找到字符串中所有字母异位词--中等
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 我的科学观|张峥:AI快速迭代,我们更需学会如何与科技共处
  • 在差异中建共鸣,《20世纪美国文学思想研究》丛书出版
  • 人民日报头版:上海纵深推进浦东高水平改革开放
  • 51岁国家移民管理局移民事务服务中心联络部副主任林艺聪逝世
  • 楼下电瓶车起火老夫妻逃生时被烧伤,消防解析躲火避烟注意事项