kaggle数据挖掘竞赛Home Credit Default Risk讲解

1.从常理来说这种预测的结果应该是0,1,也就是分为欺诈和不欺诈两种,一般衡量指标为accuracy,但是如果这样会有缺点,因为可以预测所有人都是不欺诈的,这时accuracy的值就会很大,但这样的方案无法应用。所以这里把预测的结果写为连续,这样衡量指标就可以主要用ROC,AUC和F1 Score作为衡量指标,也更准确了。

2.EDA(Exploratory Data Analysis)

探索性数据分析(EDA)是一个开放的过程,在这个过程中,我们计算统计数据并生成图表,以发现数据中的趋势、异常、模式或关系。EDA的目标是了解我们的数据能告诉我们什么。它通常从一个高层次的概述开始,然后随着我们发现数据的有趣领域而缩小到特定的领域。这些发现本身可能很有趣,或者可以用来通知我们的建模选择,比如帮助我们决定使用哪些特性。

  • 考察目标的分布

kaggle数据挖掘竞赛Home Credit Default Risk讲解_第1张图片

kaggle数据挖掘竞赛Home Credit Default Risk讲解_第2张图片

从这个信息,我们看到这是一个不平衡的分类问题。按时偿还的贷款远远多于未偿还的贷款。一旦我们进入更复杂的机器学习模型,我们就可以通过类在数据中的表示来对类进行加权,以反映这种不平衡。

  • 考察每列缺失数据的比例
# Function to calculate missing values by column# Funct 
def missing_values_table(df):
        # Total missing values
        mis_val = df.isnull().sum()
        
        # Percentage of missing values
        mis_val_percent = 100 * df.isnull().sum() / len(df)
        
        # Make a table with the results
        mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
        
        # Rename the columns
        mis_val_table_ren_columns = mis_val_table.rename(
        columns = {0 : 'Missing Values', 1 : '% of Total Values'})
        
        # Sort the table by percentage of missing descending
        mis_val_table_ren_columns = mis_val_table_ren_columns[
            mis_val_table_ren_columns.iloc[:,1] != 0].sort_values(
        '% of Total Values', ascending=False).round(1)
        
        # Print some summary information
        print ("Your selected dataframe has " + str(df.shape[1]) + " columns.\n"      
            "There are " + str(mis_val_table_ren_columns.shape[0]) +
              " columns that have missing values.")
        
        # Return the dataframe with missing information
        return mis_val_table_ren_columns

有两个方法处理缺失数据,一是填充,二是丢掉缺失比例大的列。

  • 查看列数据类别
  • 查看种类为object的列的数据种类
  • 因为大部分模型无法处理类别变量(除了lightgbm),要找到方法来处理这些类别变量
  • 分为两种处理方法,一个是label encoding(也就是每个类别一个数字),或者one-hot encoding
  • 标签编码的问题是,它给类别一个任意的顺序。分配给每个类别的值是随机的,不反映类别的任何固有方面。在上面的例子中,程序员接收到4和数据科学家1,但是如果我们再次执行相同的过程,标签可能被颠倒或者完全不同。整数的实际赋值是任意的。因此,当我们执行标签编码时,模型可能会使用特性的相对值(例如程序员= 4和数据科学家= 1)来分配不是w的权重。
  • 在这里把2个类别的,大于2个类别的用one-hot
  • 如果发现train和test数据集列不齐要进行对齐操作
  • 可以计算一下target与各列数据的相关系数
  • 可以计算各属性之间的相关系数(形成一个二维矩阵)
  •  

 

你可能感兴趣的:(数据挖掘)