DataWhale 機械学習サマーキャンプ フェーズ 3
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点に分けられます。
- 行動の次元:
eid
、udmap
udmap
キーはカテゴリ機能に処理されます
- 時間の次元:
common_ts
- タイムスタンプ特徴の抽出:
day
、hour
、minute
- タイムスタンプ特徴の抽出:
- ユーザーの次元:
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 ユーザー次元特徴の分布分析
視覚的分析の手順:
- 離散変数の分布を調べます
['eid', 'x3', 'x4', 'x5‘,'x1', 'x2', 'x6','x7', 'x8'']
。青はトレーニング セット、黄色は検証セット、分布は基本的に同じです target=1
ピンクの点は、トレーニング セットの各カテゴリの各値のターゲットの平均値、つまり、
このグラフは主に、少数のカテゴリを持つ離散変数を分析します。
- トレーニング セットとテスト セットの分布は比較的均一です
x1
主に に集中しておりx1=4
、x2
分布は比較的均一です。x6
基本的に1
と4
2 つの値に集中しています。x7
分布は比較的均一です。これが重要な特徴である可能性があります。x8
性別の特性である可能性がありますが、その特性はそれほど重要ではありませんudmap_key
抽出された特徴には欠損値があります
x3
主に41
下部に、割合が大きすぎて、特徴量の重要性が非常に低い
x4
の各カテゴリのtarget
分布が重要な機能となる可能性があります
x5
同じカテゴリ内の各カテゴリの分布は大きくx4
異なりtarget
、これが重要な特徴である可能性がありますが、特徴の数が多すぎるため、特徴を導出する際には疎性を避けるように注意する必要があります。
2.2 時間特性分布解析
主にとcommon_ts
の変化をプロットします。day
hour
day
の値はユーザーの増加と大きな関係があり、10、14、17 歳で新規ユーザーが大幅に増加していることがわかります。- 古いユーザーへの対応も増加傾向にあり、新旧ユーザーの変化
はday=10
day=18
- 新規ユーザーと古いユーザーの数は、1 日の各時間帯で基本的に同じ傾向を示します
- 生データをさらに詳しく見てみると、これら 3 つの期間のデータ量が他の期間よりも多いため、3 つのピークが表示されていることがわかります。
- さらに、1 日全体の人数に対する各時間帯の人数の割合のグラフを描いて、データをさらに分析することができます。