連続的なターゲット変数(つまり、回帰)を予測する多数のカテゴリ特徴(> 80%)を持つデータセットを使用しています。カテゴリ機能を処理する方法についてかなり読んでいます。そして、私が過去に使用したワンホットエンコーディングは、特に多くのレベルを持つ多くのカテゴリ機能に関しては、非常に悪い考えであることを学びました(これらの投稿とこれを読んでください)。
カテゴリベースの機能のターゲットベースのエンコード(スムージング)などの方法に出くわしましたが、多くの場合、Kaggleのこの投稿/カーネルの各機能のターゲット値の平均に基づいています。それでも、CandBoostがYandexグループによって昨年リリースされた意思決定ツリーに対するオープンソースのグラディエントブースティングを見つけるまで、より具体的な方法を見つけるのに苦労しています。これらは、カテゴリ機能に対して追加の統計カウントオプションを提供しているようで、単純なワンホットエンコーディングやスムージングよりもはるかに効率的です。
問題は、ドキュメントがCTR設定の設定方法に役立たないことです。別の方法を試しましたが、うまくいきません。このドキュメントでは、CTR設定はsimple_ctrであり、(CTR設定セクション)として指定されています。
['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
...]
これは非常に単純な例です。データは次のようになります。
import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
{'profit': '875','country': 'germany','account': 'Alpha Co', 'saving': 200, 'debt': -10, 'age': 42},
{'profit': '127','country': 'italy','account': 'Blue Inc', 'saving': 50, 'debt': -300, 'age': 38 }]
df = pd.DataFrame(data)
簡単なCatboostリグレッサは次のとおりです。
X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]
train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)
model = catboost.CatBoostRegressor(
depth=3,
iterations=5,
eval_metric='RMSE',
simple_ctr=None)
model.fit(train_pool);
simple_ctr、CTR設定のいずれかが、問題です!パッケージがさまざまなメソッドを提供しているように見えるので残念ですが、今のところそれらにアクセスする方法はありません。
2018年8月9日更新:数日前、私はこの問題をCatboost開発者に提起しました。こちらを参照してください。彼らはチュートリアルを提供するためにチケットをオープンしました。