あなたのアプローチはかなり合理的に聞こえますが (これは K 最近隣人または KNN と呼ばれます)、適切な距離メトリック (今日までのハミング距離) を使用しているかどうかはわかりません。あなたの方法は 1 日の正確な構造にかなり敏感で、休暇などに適応するにはおそらく長い時間がかかりますが、1 日の最初の数時間は過敏になるでしょう。
私が試みるあなたの方法の1つの変更は、「今日まで」の代わりに過去24時間を見るか、両方の方法を使用して結果を平均することです. たとえば、以前の 24 時間メソッドは休暇をすぐに取得できますが、これまでのところ、ユーザーが水曜日などに休暇を取ったことがない場合、この日のメソッドは休暇を見逃す可能性があります。これは、最後の 4 回のスローを見て次のスローを予測するこのじゃんけんゲームと似た概念です。
私が検討したいもう 1 つの変更は、ハミング距離の計算で重みをいじることです。たとえば、各ビットの一致をlambda^(-n)
で重み付けします。ここlambda
で、 は調整可能なパラメータ (1.1 などから開始) でありn
、ビットが表す過去の時間数を示します。
SVM、ロジスティック回帰、ランダム フォレストなどのさまざまな分類アルゴリズムのいずれも、非常にうまく機能するはずです。特徴ベクトルに追加する特徴:
- 曜日
- 時間
- この時間の平均占有率
- この日の平均宿泊人数
- この平均占有率(日、時間)
- N のさまざまな値に対する過去の占有 N グラム (つまり、過去の N 時間のビット ベクトル)
- 休日ですか?
- 日の出からの時間
最後に、新しいユーザーの場合、十分なトレーニング データを取得するにはおそらくしばらく時間がかかるため、すべてのユーザーに基づく全体的なモデルと個々のユーザー モデルの 2 つのモデルが必要になる場合があります。次に、ユーザー モデルの重みを増やして、2 つのモデルの出力に重みを付けることができます。