バイナリクラスのインスタンスを表すデータセットがあります。ここでのひねりは、ポジティブクラスのインスタンスのみがあり、ネガティブクラスのインスタンスはないということです。というか、ポジティブに近いネガから抽出したい。
具体的には、当店で購入し、自分の意志でポイントカードを要求した人のデータがあるとします。プライバシーの懸念はさておき(これは単なる例です)、年齢、郵便番号などのさまざまな属性があります。
この例に続く他のクライアントのセットは、カードを申請しなかったクライアントです。
私たちが欲しいのは、最初のグループでポイントカードを申請したものに最も類似しているもののサブセットを見つけて、ポイントプログラムに申請するためのオファーを送信できるようにすることです。
「ネガティブ」のグループ内からインスタンスを取得しようとしているため、これは正確には分類の問題ではありません。
クラスター(ポイントカードクライアント)は既にわかっているため、これは正確にはクラスタリングではなく、通常は監視されません。
kNNの使用を考えました。しかし、私はここで私の選択肢が何であるかを本当に知りません。
また、可能であれば、wekaまたは別のJavaライブラリを使用してこれを実現する方法と、すべての属性を正規化する必要があるかどうかも知りたいです。
異常検出アルゴリズムを使用できます。これらのアルゴリズムは、新しいクライアントがポイントカードを取得したクライアントのグループに属しているかどうかを示します(この場合、それらは異常になります)。
2つの基本的なアイデアがあります(以下にリンクした記事から):
ポジティブラベル付けされたデータ(カードを使用するクライアント)の特徴ベクトルを、(たとえばPCAを使用して)低次元のベクトル空間に変換します。次に、結果の変換されたデータの確率分布を計算し、新しいクライアントが同じ統計分布に属しているかどうかを確認できます。また、変換されたデータの重心までの新しいクライアントの距離を計算し、分布の標準偏差を使用して、それがまだ十分に近いかどうかを判断することもできます。
機械学習アプローチ:カードデータを使用して、クライアントで自動エンコーダネットワークをトレーニングします。オートエンコーダは、そのアーキテクチャにボトルネックがあります。入力データを低次元の新しい特徴ベクトルに圧縮し、その後、その圧縮されたベクトルから入力データを再構築しようとします。トレーニングが正しく行われている場合、カードデータセットを持つクライアントに類似した入力データの再構成エラーは、それに類似していない入力データよりも小さいはずです(これらはカードを必要としないクライアントであることが望ましい)。
開始するには、このチュートリアルをご覧ください:https://towardsdatascience.com/how-to-use-machine-learning-for-anomaly-detection-and-condition-monitoring-6742f82900d7
どちらの方法でも、最初に属性を標準化する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加