Datawhale练习之二手车价格预测

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日

相关文章

  • Python绘制3D图形

    Python绘制3D图形的完整攻略 1. 引言 Python是一种直截了当且让人意想不到地灵活的编程语言,而它在技术界的重要地位无人可比。之所以如此受欢迎,其原因之一就是大量可供选择的模块或库包括用于数据可视化的matplotlib模块和3D图形可视化的plotly。 本文将以matplotlib为例,介绍如何使用Python绘制3D图形。 2. 环境安装 …

    python 2023年6月2日
    00
  • Selenium+Python自动化脚本环境搭建的全过程

    下面是Selenium+Python自动化脚本环境搭建的全过程: 准备工作 安装Python 首先需要安装Python。可以从官方网站 https://www.python.org/downloads/ 下载,建议下载最新的稳定版。安装时需要注意设置环境变量。 安装pip pip 是 Python 包管理工具,通过它可以方便地下载并安装 Python 包。在…

    python 2023年5月19日
    00
  • pandas按条件筛选数据的实现

    以下是使用 Pandas 按条件筛选数据的实现攻略: 根据条件选择数据 Series 操作 可以使用布尔运算符(如:=,>,<,>=,<=或!=)将列与值进行比较。生成一系列 True/False 值,再将一个 pandas.series 与该值对比时,True 值表示哪些数据需要被筛选出来。模板:df[“Coloumn Name”]…

    python 2023年5月13日
    00
  • react+django清除浏览器缓存的几种方法小结

    针对“react+django清除浏览器缓存的几种方法小结”这一主题,我将为您提供一个完整的攻略。如下所示: React+Django清除浏览器缓存的几种方法小结 前言 当我们在使用React和Django作为Web应用的前端和后端技术栈时,有时候会遇到浏览器缓存导致页面更新不及时甚至出错的情况。因此,本文将分享几种清除浏览器缓存的方法,帮助大家解决相关问题…

    python 2023年6月3日
    00
  • Python实现ATM系统

    下面是详细讲解“Python实现ATM系统”的完整攻略。 1. 需求分析 在实现ATM系统之前,需要先进行需求分析。具体来说,我们需要考虑以下几个方面的需求: 用户登录和认证; 查看余额; 存款和取款; 转账和还款。 2. 类和数据库设计 在了解完需求之后,我们需要对ATM系统进行类和数据库设计。具体来说,我们可以设计以下几个类: 用户类; 账户类; ATM…

    python 2023年5月19日
    00
  • Python使用Appium在移动端抓取微博数据的实现

    我可以为您详细讲解“Python使用Appium在移动端抓取微博数据的实现”的完整攻略。 概述 本攻略主要介绍如何使用Python和Appium在移动端抓取微博数据。通过本文,您将了解如何配置Appium环境、编写Python脚本,并通过两个示例了解如何使用Appium对移动端进行抓取。 前提要求 在开始本攻略之前,您需要具备以下前提要求: 一定的Pytho…

    python 2023年6月3日
    00
  • pandas读取excel,txt,csv,pkl文件等命令的操作

    下面是“pandas读取excel,txt,csv,pkl文件”的完整实例教程。 准备工作 在使用pandas读取文件之前,首先需要导入pandas库。通常我们使用以下命令导入pandas: import pandas as pd 接下来我们需要准备几个数据文件来做示例: 示例1:sales.xlsx,一个包含销售数据的Excel文件 示例2:iris.cs…

    python 2023年5月14日
    00
  • python的即时标记项目练习笔记

    Python的即时标记项目练习是一种综合性较强的实战练习,主要涉及到Web开发、爬虫、数据处理等技术,下面我将详细讲解一下攻略。 前言 在进行Python的即时标记项目练习之前,需要先掌握Python的基础语法和常用库,如requests、BeautifulSoup等。此外,在进行Web开发方面的实战练习时,也需要熟悉一些常见的Web框架,如Flask、Dj…

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