DataWhale 機械学習サマーキャンプ フェーズ III - タスク 2: 視覚分析

DataWhale 機械学習サマーキャンプ フェーズ 3
-ユーザーの新しい予測チャレンジ


学習記録Ⅱ(2023.08.23) - 視覚分析

2023.08.17
すでにベースラインを実行済み、オンライン スコアリング機能を追加せずに lightgbm ベースラインに変更;ベースライン特徴量0.52214を追加、オンライン スコアリング;激しく派生した特徴量とモデル パラメーターを微調整し、オンライン スコアリング2023.08.23データ分析、派生特徴量:派生機能、モデルのチューニング:
0.78176
0.86068

0.87488
0.89817

コミュニケーションと共有ビデオ:
[DataWhale「ユーザー追加予測チャレンジ」コミュニケーションと共有 - Bilibili] https://b23.tv/zZMLtFG

1. 質問の理解

ここに画像の説明を挿入

本大会の特徴は主に以下の3点に分けられます。

  • 行動の次元: eidudmap
    • udmapキーはカテゴリ機能に処理されます
  • 時間の次元:common_ts
    • タイムスタンプ特徴の抽出: dayhourminute
  • ユーザーの次元:x1~x8

2. データ可視化分析

以下のコードを使用して描画する前に、いくつかの設定を行う必要があります。詳細は、次のリンクを参照してください:
https://www.kaggle.com/code/jcaliz/ps-s03e02-a-complete-eda/notebook
このノートブックは豊富な視覚化を提供します。分析コードとアイデアは参照する価値があります。

描画コード:

def plot_cate_large(col):
    data_to_plot = (
        all_df.groupby('set')[col]
        .value_counts(True)*100
    )

    fig, ax = plt.subplots(figsize=(10, 6))

    sns.barplot(
        data=data_to_plot.rename('Percent').reset_index(),
        hue='set', x=col, y='Percent', ax=ax,
        orient='v',
        hue_order=['train', 'test']
    )

    x_ticklabels = [x.get_text() for x in ax.get_xticklabels()]

    # Secondary axis to show mean of target
    ax2 = ax.twinx()
    scatter_data = all_df.groupby(col)['target'].mean()
    scatter_data.index = scatter_data.index.astype(str)

    ax2.plot(
        x_ticklabels,
        scatter_data.loc[x_ticklabels],
        linestyle='', marker='.', color=colors[4],
        markersize=15
    )
    ax2.set_ylim([0, 1])

    # Set x-axis tick labels every 5th value
    x_ticks_indices = range(0, len(x_ticklabels), 5)
    ax.set_xticks(x_ticks_indices)
    ax.set_xticklabels(x_ticklabels[::5], rotation=45, ha='right')

    # titles
    ax.set_title(f'{
      
      col}')
    ax.set_ylabel('Percent')
    ax.set_xlabel(col)

    # remove axes to show only one at the end
    handles = []
    labels = []
    if ax.get_legend() is not None:
        handles += ax.get_legend().legendHandles
        labels += [x.get_text() for x in ax.get_legend().get_texts()]
    else:
        handles += ax.get_legend_handles_labels()[0]
        labels += ax.get_legend_handles_labels()[1]

    ax.legend().remove()

    plt.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.08), fontsize=12)
    plt.tight_layout()
    plt.show()

2.1 ユーザー次元特徴の分布分析

視覚的分析の手順:

  1. 離散変数の分布を調べます['eid', 'x3', 'x4', 'x5‘,'x1', 'x2', 'x6','x7', 'x8'']。青はトレーニング セット、黄色は検証セット、分布は基本的に同じです
  2. target=1ピンクの点は、トレーニング セットの各カテゴリの各値のターゲットの平均値、つまり、

ここに画像の説明を挿入
このグラフは主に、少数のカテゴリを持つ離散変数を分析します。

  • トレーニング セットとテスト セットの分布は比較的均一です
  • x1主に に集中しておりx1=4x2分布は比較的均一です。x6基本的に142 つの値に集中しています。x7分布は比較的均一です。これが重要な特徴である可能性があります。
  • x8性別の特性である可能性がありますが、その特性はそれほど重要ではありません
  • udmap_key抽出された特徴には欠損値があります

ここに画像の説明を挿入

  • x3主に41下部に、割合が大きすぎて、特徴量の重要性が非常に低い

ここに画像の説明を挿入

  • x4の各カテゴリのtarget分布が重要な機能となる可能性があります
    ここに画像の説明を挿入
  • x5同じカテゴリ内の各カテゴリの分布は大きくx4異なりtarget、これが重要な特徴である可能性がありますが、特徴の数が多すぎるため、特徴を導出する際には疎性を避けるように注意する必要があります。
    ここに画像の説明を挿入

2.2 時間特性分布解析

主にcommon_ts変化をプロットします。dayhour

ここに画像の説明を挿入

  • dayの値はユーザーの増加と大きな関係があり、10、14、17 歳で新規ユーザーが大幅に増加していることがわかります。
  • 古いユーザーへの対応も増加傾向にあり、新旧ユーザーの変化
    ここに画像の説明を挿入
    day=10day=18
  • 新規ユーザーと古いユーザーの数は、1 日の各時間帯で基本的に同じ傾向を示します
  • 生データをさらに詳しく見てみると、これら 3 つの期間のデータ量が他の期間よりも多いため、3 つのピークが表示されていることがわかります。
  • さらに、1 日全体の人数に対する各時間帯の人数の割合のグラフを描いて、データをさらに分析することができます。

おすすめ

転載: blog.csdn.net/qq_38869560/article/details/132461146