Car Risk数据集

给定汽车的各项性能指标,设计算法对汽车的投保风险进行打分

题目描述

某保险公司销售一种汽车保险,需要对汽车状态进行评估。现在你需要设计一个算法模型,可以根据汽车的各项指标对汽车的投保风险进行打分。投保风险是从0到70的正整数,数值越大代表风险越高。

小提示

  • 本题是一个典型的回归问题
  • 先从train.csv中提取每辆车的多项特征(feature)和类别(label),使用feature和label进行模型训练
  • 车辆的特征中有数值型和类别性,数值型的特征注意进行范围标准化,类别型的特征转化为one-hot encoding的形式
  • 模型可以使用传统的回归模型,如SVR,CART等。但强烈建议使用集成学习的算法将多个简单模型集成为一个复杂模型,如Random Forest,Adaboost等,在使用集成学习的方法时,要注意引入正则化项,防止模型过拟合
  • 最后使用训练好的模型预测test.csv中每辆车的风险分数

先修技能

  • 懂得基本的机器学习回归模型的原理和使用,如SVR,CART等。
  • 懂得集成学习的相关算法,如Random Forest,Adaboost等。

术语解释

  • SVR(支持向量回归) : 是一种基于SVM(支持向量机)的回归方法。支持向量回归在做拟合时,采用了支持向量的思想,和拉格朗日乘子式的方式,来对数据进行回归分析
  • CART(分类与回归树) : 属于一种特殊的决策树,其假设决策树是二叉树,内部结点特征的取值为“是”和“否”,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布,常用来做分类和回归分析。
  • 集成学习(Ensemble Learning) : 是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法
  • Random Forest(随机森林) : 指的是利用多棵树对样本进行训练并预测的一种分类器。在机器学习领域,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
  • Adaboost : 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

输入格式

数据文件train.csvtest.csv包含多辆汽车的信息。每辆汽车有如下信息:

  1. Id: 每个汽车的唯一id
  2. Score: 汽车的风险数值(整数,仅train.csv中包含此信息)
  3. Col_1 ~ Col_32: 每个汽车的32个特征,其中有数值型,有类别型(用字母表示)

训练数据集train.csv包含34列,分别对应上述信息。测试数据集test.csv包含33列,不包含Score信息。

输出格式

您需要提交一个文件,文件应采用submission.csv的格式,具体如下:对于测试集中的每辆汽车,输出一行,其中包含汽车的Id和您预测的风险值。 您的提交文件将如下所示:

Id,Score
1,5
2,6
...
etc.

目标

给定汽车的各项性能指标,设计算法对汽车的投保风险进行打分

评价

对于提交的文件,我们将使用RMSE (Root Mean Square Error)作为评价指标,公式如下:

$$ RMSE=\sqrt{\frac{\sum_{i=1}^N(y_i-\hat{y_i})^2}{N}}

$$

其中$$N$$代表测试数据集中汽车的数量,$$y_{i}$$代表其真实的风险值,$$\hat{y_i}$$代表你预测的风险值。

代码与数据

完整代码

测评配置环境

python

pip install -U scikit-learn
pip install -U numpy
pip install -U pandas

测评代码

import numpy as np
import pandas as pd
from sklearn.metrics import mean_squared_error

test = pd.read_csv("./car_risk_correct_submission.csv").sort_values('Id')
pred = pd.read_csv("./prediction_test.csv").sort_values('Id')

rmse =np.sqrt(mean_squared_error(test['Score'], pred['Score']))

results matching ""

    No results matching ""