当前位置: 首页 > 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%的方差,这非常适合预测交通需求。

总结

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

http://www.xdnf.cn/news/184699.html

相关文章:

  • 日本IT|UIUX主要的工作都是哪些?及职业前景
  • 【每日随笔】文化属性 ② ( 高维度信息处理 | 强者思维形成 | 认知重构 | 资源捕获 | 进化路径 )
  • LangChain构建大模型应用之RAG
  • 使用ROS实现多机通讯
  • 线上查询车辆出险记录:快速掌握事故情况!
  • 大模型API密钥的环境变量配置(大模型API KEY管理)(将密钥存储在环境变量)(python-dotenv)(密钥管理)
  • 数据结构(七)---链式栈
  • AI看论文自动生成代码库:Paper2Code如何革新科研复现?
  • 函数式链表:Python编程的非常规 “链” 接
  • QT6 源(53)篇三:存储 c 语言字符串的类 QByteArray 的使用举例,
  • 移除生产环境所有console.log
  • 给视频自动打字幕:从Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制
  • 基于STM32、HAL库的AD7616BSTZ模数转换器ADC驱动程序设计
  • Linux操作系统学习---进程地址空间
  • 【LaTex】8.1 文档类与层级
  • 前端权限管理
  • 小刚说C语言刷题——1320时钟旋转
  • 生成式人工智能认证(GAI认证)要学哪些知识?
  • google chrome 中 fcitx5 候选框不跟随光标
  • 【SpringCloudAlibaba】Dubbo 和 Spring Cloud OpenFeign 在服务治理能力上的差异
  • 生成式人工智能认证(GAI认证)考试难吗?
  • SpringBoot的自动扫描特性-笔记
  • Vue初步总结-摘自 黑马程序员
  • 浅谈 MySQL 日志的原理
  • 新增 29 个专业,科技成为关键赛道!
  • 互联网的下一代脉搏:深入理解 QUIC 协议
  • Day23-Web开发——Linux
  • 基于深度学习的图像压缩技术(二)
  • AI时代下如何实现财务自由?
  • 江达、安托、凯思软件这几家达索代理商,哪家好?