黄著者のコメントのために
記事のディレクトリ
1.Tmallの買戻し予測
質問リンク:
1.1データ探索
著者は理解しやすいようにデータフィールドのみをリストしています。公式のEDAを見ることができます。
Tmall Repeat Purchase Forecast02データ探索
1.1.1ユーザー行動ログ
行動ログテーブルと製品テーブルを結合するような感じです
1.1.2ユーザーポートレート
年齢と性別だけが2つの特徴です
1.1.3トレーニングデータとテストデータ
最後にトレーニングと予測を行い、2つのIDの1つのラベルを予測します:user _ id + Merchant _id→labeluser \ _id + Merchant \ _id \ rightarrow labelu s e r _ i d+m e r c h a n t _ i d→l a b e l
label
ユーザーが再購入するかどうかを示します
基本的に、ユーザーと製品間の相互作用特性を構築する3テーブル結合。
1.2機能エンジニアリング(公式コード)
このセクションで説明官方代码
する機能エンジニアリング操作
1.2.1ユーザーが閲覧した製品の属性に従って、xx_pathのシーケンス特性を構築します
ここにピットがあり、実際のファイルのフィールド名がページの情報と一致しません
$ head -n 1 user_log_format1.csv
user_id,item_id,cat_id,seller_id,brand_id,time_stamp,action_type
売り手はtrain_format1.csv
あるmerchant_id
にuser_log_format1.csv
Aseller_id
group_by
ユーザーは、時系列でリストを作成します
agg_dict = {
# group by user_id
'item_id': list_join_func,
'cat_id': list_join_func,
'seller_id': list_join_func,
'brand_id': list_join_func,
'time_stamp': list_join_func,
'action_type': list_join_func
}
rename_dict = {
'item_id': 'item_path',
'cat_id': 'cat_path',
'seller_id': 'seller_path',
'brand_id': 'brand_path',
'time_stamp': 'time_stamp_path',
'action_type': 'action_type_path'
}
# 主键是user_id, 表示用户的浏览记录
user_log_path = user_log.groupby('user_id').agg(agg_dict).reset_index().rename(columns=rename_dict)
all_data_path = all_data.merge(user_log_path, on='user_id')
公式コードはこのパスを使用して統計情報を抽出します(使用するgroup by
ことはできますが、わかりません。質問することはできません)
このパスは、後で構築するために使用されます
- 統計的特徴
- TFIDFの機能
- 埋め込み機能
1.2.2統計的特性
- ユーザーが操作した製品の数
- ユーザーがやり取りした販売者の数
- ユーザーが操作した製品のカテゴリの数
⋯\ cdots ⋯
- ユーザーがインタラクションレコードを持っている最も早い(最も遅い)時間
- ユーザートランザクション期間
timestap
分散の分布
⋯\ cdots ⋯
- ユーザーのお気に入りの店
- ユーザーのお気に入りのブランド
- ユーザーの最も一般的なアクション
注釈:
- このIDオプションを置き換えるために、ストアの埋め込みを行うことができます
- 機能を作成します。つまり、[ユーザーのお気に入りのxx埋め込み]-[予測されるxx埋め込み]
⋯\ cdots ⋯
- ユーザーがお気に入りのストアで費やした行動の数
- ユーザーがお気に入りのブランドに費やす行動の数
このタイプの機能は、ユーザーが製品(ショップ)に「忠実」であるかどうかを説明するために使用されますが、比率を計算するには、それを合計回数で割るのが最善です。
のでaction_type
、このフィールドは非常に特別であり、そのようなお気に入りは、クリックや購入などのアクションが含まれている、別に、各ユーザのアクションの異なる種類の数をカウントする必要があります
- ヒット数
- カートの時間に追加
- 購入数
- お気に入り
実際、統計が少なすぎます。マーチャントなどの要素を考慮せずに、[user_idからウィンドウ関数を選択]するだけです
1.2.3TFIDFの機能
本質的にはまだシーケンスモデリングを行っています。上記のように、user_idに対してgroup byを実行した後、seller、cat、およびその他のフィールドに対してaggを実行すると、xx_pathの特性が取得されます。
本質的に、これは文のセットであり、NLPword2vecを使用して各エンティティの埋め込みを抽出できます。
埋め込みについて説明する前に、bag-of-wordsモデルを使用してエンティティをモデル化し、TFIDFを使用して、高頻度の一般的な単語の重みを減らし、低頻度の重要な単語の重みを増やすことができます。
スーパーパラメータ:
ngram_range=(1, 1)
ユニグラムモデルmax_features=100
特徴の最大数は100です(最後に100列しかない)
実際、最後に得られるのは、説明する用户
機能です。
tfidfVec = TfidfVectorizer(stop_words=ENGLISH_STOP_WORDS, ngram_range=(1, 1), max_features=100)
# 利用countvector,tfidf提取特征
# columns_list = ['seller_path', 'cat_path', 'brand_path', 'action_type_path', 'item_path', 'time_stamp_path']
columns_list = ['seller_path']
for i, col in enumerate(columns_list):
all_data_test[col] = all_data_test[col].astype(str)
tfidfVec.fit(all_data_test[col])
data_ = tfidfVec.transform(all_data_test[col])
if i == 0:
data_cat = data_
else:
data_cat = sparse.hstack((data_cat, data_))
## 特征重命名 特征合并
df_tfidf = pd.DataFrame(data_cat.toarray())
df_tfidf.columns = ['tfidf_' + str(i) for i in df_tfidf.columns]
all_data_test = pd.concat([all_data_test, df_tfidf], axis=1)
注釈:
LDA、LSA、pLSA、NFM、行列分解、次元削減、その他の特徴抽出方法などのトピックモデルを試すことができます
group_by Seller_id、agg user_idを使用できるため、マーチャントの単語ベクトルを取得できます。つまり、group_byは単語ベクトルを取得します
1.2.4 w2v単語ベクトルを計算した後、すべての単語ベクトルの平均を取ります
タイトルは実際にコンテンツを終了しました。
基本的に基本的で文档向量
計算が簡単な単語ベクトルの評価。
問題はドキュメントベクトル計算に変換され、次の考え方に沿って最適化できます。
SIFの重み付け、BM25のランク付け、多くあり、参照が最初にリストされています。
- 文をベクトルとして表現する(上):教師なし文表現学習(文の埋め込み)
- 文をベクトルとして表現する(下):教師なし文表現学習(文の埋め込み)
- センテンス埋め込みのシンプルだが打ちにくいベースライン[SanjeevArora and Yingyu Liang and Tengyu Ma、2017]
- テキストの類似性を計算する4つの方法の比較[YvesPeirsman]
- BM25と言語モデルの改善を検討
単語ベクトルの最適化のアイデア:
- GloVeは単語ベクトルを計算します
1.2.5スタッキング機能
本質的には、awslabAutoGluon
の2層スタッキングに似ています
つまり、モデルの予測値連結がトレーニングセットに入れられます。concatは交差検定で設定された検証の予測値であるため、ラベルがリークすることはありません。
注釈:
AutoGluonのRepeatedKFoldを使用して、堅牢性を高めることができます(特定の使用法についてはソースコードを参照してください)