Datawhale练习之二手车价格预测

yizhihongxing

Datawhale 练习之二手车价格预测

本攻略旨在帮助参与 Datawhale 练习之二手车价格预测的选手们完成任务,包括了赛题分析、数据处理、特征工程、模型选择和训练、模型评估和提交等一系列环节。

赛题分析

首先我们需要理解赛题,明确目标和数据。二手车价格预测的目标是根据一系列特征预测二手车的价格。而数据集是二手车信息,包括了二手车的品牌、车系、上牌时间、公里数等等特征。我们需要根据这些特征建立合适的模型,完成二手车价格预测。

数据处理

在赛题分析之后,我们需要进行数据处理,包括数据清洗、缺失值填充、数据转换、特征筛选等等。其中,在缺失值填充方面,我们可以选择用均值、中位数、众数等填充;在特征筛选方面,可以通过 IV 值、WOE 值、随机森林等方法进行。

以下是样例代码:

# Import necessary libraries
import pandas as pd
import numpy as np

# Load data
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

# Data cleaning
train_data = train_data.drop(['SaleID', 'name', 'regDate', 'model', 'brand', 'regionCode', 'seller', 'creatDate', 'offerType'], axis=1)
test_data = test_data.drop(['SaleID', 'name', 'regDate', 'model', 'brand', 'regionCode', 'seller', 'creatDate', 'offerType'], axis=1)

# Data transformation
train_data['power'] = train_data['power'].apply(lambda x: np.log(x) if x > 0 else 0)
test_data['power'] = test_data['power'].apply(lambda x: np.log(x) if x > 0 else 0)

# Missing value filling
train_data = train_data.fillna(train_data.median())
test_data = test_data.fillna(test_data.median())

# Feature screening
from sklearn.feature_selection import SelectKBest, mutual_info_regression

selector = SelectKBest(mutual_info_regression, k=20)
selector.fit(train_data.drop(['price'],axis=1), train_data['price'])
selected_features = selector.get_support(indices=True)
train_data = train_data.iloc[:,selected_features]
test_data = test_data.iloc[:,selected_features]

特征工程

在数据处理之后,我们需要开展特征工程,包括特征构造、特征编码、特征组合等步骤。其中,常用的特征构造包括时间、距离等;特征编码可以用 One-Hot 编码、二进制编码等;特征组合可以根据业务知识和统计方法进行。

以下是样例代码:

# Feature construction
train_data['used_day'] = (pd.to_datetime(train_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(train_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
train_data['used_year'] = train_data['used_day'] // 365
test_data['used_day'] = (pd.to_datetime(test_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(test_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
test_data['used_year'] = test_data['used_day'] // 365

# Feature encoding
train_data = pd.get_dummies(train_data, columns=['bodyType', 'fuelType', 'gearbox'], prefix=['bodyType', 'fuelType', 'gearbox'])
test_data = pd.get_dummies(test_data, columns=['bodyType', 'fuelType', 'gearbox'], prefix=['bodyType', 'fuelType', 'gearbox'])

# Feature combination
train_data['power_bin'] = pd.cut(train_data['power'], bins=[-np.inf, np.log(60), np.log(120), np.log(250), np.inf], labels=[1, 2, 3, 4])
test_data['power_bin'] = pd.cut(test_data['power'], bins=[-np.inf, np.log(60), np.log(120), np.log(250), np.inf], labels=[1, 2, 3, 4])

模型选择和训练

在特征工程之后,我们需要选择适合的模型进行训练。在二手车价格预测中,我们可以选择线性回归、决策树、随机森林、XGBoost 等模型。在训练过程中,我们需要注意超参的选择和调试。

以下是样例代码:

# Model selection and training
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

model = LinearRegression()
model.fit(train_data.drop(['price'],axis=1), train_data['price'])

# Prediction and evaluation
y_pred = model.predict(test_data)
mae = mean_absolute_error(test_data['price'], y_pred)
print('MAE: {:.2f}.'.format(mae))

模型评估和提交

最后,我们需要对模型进行评估和提交。在评估过程中,可以选择 MAE、RMSE 等指标;在提交过程中,需要将预测结果进行格式化,上传到在线评测平台。

以下是样例代码:

# Model evaluation
from sklearn.metrics import mean_squared_error

y_pred_train = model.predict(train_data.drop(['price'],axis=1))
rmse_train = np.sqrt(mean_squared_error(train_data['price'], y_pred_train))
print('RMSE_train: {:.2f}.'.format(rmse_train))

# Submission
submission = pd.DataFrame()
submission['SaleID'] = test_data.index
submission['price'] = y_pred
submission.to_csv('submission.csv', index=False, header=True)

示例说明

以下是两个示例说明:

  1. 特征构造
# Feature construction
train_data['used_day'] = (pd.to_datetime(train_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(train_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
train_data['used_year'] = train_data['used_day'] // 365

在此示例中,我们利用创建日期和注册日期,构造出二手车的使用天数和使用年限,作为新的特征,用于提高模型的预测性能。

  1. 模型选择和训练
# Model selection and training
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

model = RandomForestRegressor(n_estimators=100, max_depth=20, random_state=42)
model.fit(train_data.drop(['price'],axis=1), train_data['price'])

# Prediction and evaluation
y_pred = model.predict(test_data)
mae = mean_absolute_error(test_data['price'], y_pred)
print('MAE: {:.2f}.'.format(mae))

在此示例中,我们选择随机森林回归模型,并调试了其 n_estimators 和 max_depth 超参数,对模型进行训练和预测。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Datawhale练习之二手车价格预测 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 基于ID3决策树算法的实现(Python版)

    基于ID3决策树算法的实现(Python版) 1. 简介 决策树是一种常用的机器学习算法,它可以用于分类和回归问题。ID3是一种常用的决策树算法,它基于信息熵来选择最佳划分属性。本文将介绍如何使用Python实现基于ID3决策树算法的分类器。 2. 数据集 我们将使用一个简单的数据集来演示如何使用ID3算法构决策树。这个数据集包含5个样本,每个样本两个特征:…

    python 2023年5月14日
    00
  • 在 Python 中使用参数获取用户输入

    【问题标题】:Get user input with arguments in Python在 Python 中使用参数获取用户输入 【发布时间】:2023-04-02 14:29:01 【问题描述】: TL;DR 我需要获取包含参数的用户输入才能做某事,我需要自己的脚本来获取用户输入,并且就像它自己的解释器一样工作。 我的目标是使用自己的命令创建自己的 C…

    Python开发 2023年4月8日
    00
  • 一文助你搞懂参数传递原理解析(java、go、python、c++)

    一文助你搞懂参数传递原理解析 在编程中,参数传递是一个非常重要的概念。不同的编程语言有不同的参数传递方式,本文将介绍Java、Go、Python和C++中的参数传递原理,并提供两个示例。 Java中的参数传递 在Java中,参数传递是按值传递的。这意味着,当我们将一个变量作为参数传递给一个方法时,实际上传递的是该变量的值,而不是变量本身。以下是一个示例代码:…

    python 2023年5月15日
    00
  • pytest之assert断言的具体使用

    pytest之assert断言的具体使用 在Python中,pytest是一个流行的测试框架,它提供了许多有用的功能来编写和运行测试。其中一个重要的功能是assert断言,它可以用来验证代码的正确。本文将为您提供一个完整攻略,详细讲解pytest中assert断言的具体使用,包括语法、见的断言方法和两个示例说明。 1. assert断言语法 在pytest中…

    python 2023年5月14日
    00
  • 如何将图像转换为NumPy数组

    将图像转换为NumPy数组是图像处理和计算机视觉领域中常见的操作之一。下面我将为你提供完整的攻略来实现这一过程。 准备工作 在开始之前,您需要确保已经安装了Python和以下的Python包: NumPy OpenCV(可选) 如果您还没有安装这些软件包,可以通过以下方式来安装它们: pip install numpy pip install opencv-…

    python-answer 2023年3月25日
    00
  • python实现 获取b站主播直播间 粉丝牌信息的方法

    下面是“python实现获取B站主播直播间粉丝牌信息的方法”的完整攻略。 简介 Bilibili(B站)是一家国内知名的视频分享平台,网站内有许多知名的up主,这些up主通过直播和上传视频吸引了大量的粉丝。直播间粉丝牌是B站直播间的一种特殊礼物,拥有这种礼物的用户可以在直播间内展示出自己的特殊身份。本文将介绍如何使用Python获取B站主播直播间粉丝牌的信息…

    python 2023年6月3日
    00
  • 【manim动画教程】–高级动画效果

    在常用的动画效果中,介绍了一些元素的创建,销毁,移动和变换的方法,这些方法都是针对单个动画的。如果需要多个动画互相关联,或者元素需要有更复杂的运动方式,那么,仅仅依靠常用的动画效果可能就无法满足要求了。 本篇的高级动画效果主要介绍一些更加灵活的元素运动方式,如何组合多个动画,以及如何联动多个动画的方式。掌握了这些方法,就能够表达出更加复杂的数学几何动画。 1…

    python 2023年4月17日
    00
  • Python hmac模块使用实例解析

    在Python中,可以使用hmac模块来计算消息的哈希值。以下是Python hmac模块使用实例解析的详细攻略: 计算消息的哈希值 要计算消息的哈希值,可以使用hmac模块。以下是计算消息的哈希值的示例: import hmac message = b’Hello, World!’ key = b’secret’ h = hmac.new(key, mes…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部