私が設計しているアルゴリズムの次のステップに何をすべきかについての助けが必要です。
NDAのせいで、あまり開示することはできませんが、一般的でわかりやすいものにしようと思います。
基本的に、アルゴリズムのいくつかのステップの後、私はこれを持っています:
私が持っている各顧客と、彼らが1か月間に行うイベントについて、最初のステップでイベントをいくつかのカテゴリにクラスター化しました(各顧客は、1からxが1から25までのカテゴリに分けられたイベントを持ち、通常、最初のカテゴリは他のカテゴリよりもイベントの密度が高くなります)。
各カテゴリと顧客について、1時間あたりの月のイベントを集約する時系列を作成しました(これらのイベントがいつ行われるかのパターンを取得します)。また、私は、男が少なくとも1つのイベントを実行する1か月(30日間)の日数と、少なくとも1つのイベントの合計に対する少なくとも1つのイベントの日数に基づいて、いくつかの正規化変数を使用していますイベント(すべてのクラスターを集約)。1つ目は、その月の顧客の活動度の比率を示し、2つ目は、他のカテゴリに対してカテゴリを重み付けします。
ファイナルテーブルは次のようになります
|*Identifier*| *firstCat* | *feature1* | *feature2* | { *(TIME SERIES)* }
CustomerID | ClusterID | DaysOver30 | DaysOverTotal | Events9AM Events10AM ...
xx | 1 | 0,69 | 0,72 | 0,2 0,13 ...
xx | 2 | 0,11 | 0,28 | 0,1 0,45 ...
xy | 1 | 0,23 | 0,88 | 0,00 0,60 ...
xy | 2 | 0,11 | 0,08 | 1,00 0,00 ...
xy | 3 | 0,10 | 0,04 | 0,40 0,60 ...
時系列変数は、各特定カテゴリの1日あたりのイベントの合計に対する割合です(これは、すべての変数を合計する各行が1であることを意味します)。そのようにする理由は、たとえば、イベント0 0 0 1 0
を含む時系列1 1 1 2 1
が完全に異なり、通常に標準化すると同様の結果が得られるためです。また、異なるカテゴリ間のスキューが大きいため、時系列の値を他のカテゴリとは独立してチェックします。
ここで行う必要があるのは、これらのカテゴリ(1〜xが1〜25の任意の数)を3つのタグ(タグA、タグB、およびそれらのどれでもない)に識別することです。これらの変数を見ると、それらがどのタグに属しているかを手動で識別できます。アイデアは、できる限り手動で識別し、分類アルゴリズムを使用してそれから学習し、すべてを識別することです。
私のアイデアはテーブルで複数のロジスティック回帰を使用することでしたが、時系列のすべての変数は相関しています(それらは互いに線形結合であるため)ので、ユークリッドを使用する時系列でのみクラスタリングアルゴリズムを使用する方が良いと考えました距離を使用して、さまざまなパターンを分類し、ロジスティック回帰で結果と他の2つの正規化変数を使用します。
私が持っている他の懸念は、このアプローチは各行を他の行とは無関係に取り、理論的には各顧客に対して0または1つのタグA、0または1つのタグBのみがあり、残りはなし(別のヒントは、正規化機能に大きく依存するため、通常はタグAとBは最初のカテゴリの間にあるということです(合計日数が多い場合、時系列パターンに応じて行がAまたはBになる可能性が高くなります) 。
編集:これはもはや問題ではありません。タグAまたはその他のタグとタグBまたはその他のタグの2つの異なるロジスティック回帰を実行します。結果の確率はそれぞれ最適なもののみを選択できます。
データセットは膨大で、SQL(Teradata)を使用して最終アルゴリズムを適用する必要がありますが、ロジスティック回帰の係数またはクラスタリングの中心を取得するには、サンプルを取得してRを使用します。