時系列分類-非常に悪い結果


11

入力が携帯電話アカウントの最初の21日間の時系列音声使用データ(秒単位)である時系列分類問題に取り組んでいます。対応するターゲット変数は、そのアカウントが35〜45日の範囲でキャンセルされたかどうかです。したがって、これはバイナリ分類問題です。

これまでに試したすべての方法から(さまざまな程度で)非常に悪い結果が得られます。最初に、k-NN分類(さまざまな変更を加えて)を試しましたが、非常に悪い結果が得られました。これにより、時系列から特徴を抽出することになりました。つまり、平均、分散、最大、最小、合計ゼロ日、合計後続ゼロ日、前半平均と後半平均の差などであり、最も予測的な特徴は合計であるように見えました。ゼロ日と合計末尾ゼロ日(いくつかの分類アルゴリズムを使用)。これは最高のパフォーマンスを示しましたが、パフォーマンスはまだあまり良くありませんでした。

次の戦略は、トレーニングセットのネガティブインスタンスが非常に少ないため、オーバーサンプルすることでした。これは、より正確なキャンセル予測をもたらしましたが、より多くの偽陽性を犠牲にしています。

おそらく、時系列の使用状況データ自体は単純にあまり予測的ではないと考え始めています(常識では予測すべきであるとされていますが)。おそらく、私が考慮していない潜在的な変数がいくつかあります。データを見ると、奇妙な動作も見られます。つまり、一部の例では使用量がほとんどないか、減少している(またはまったくない)場合があり、キャンセルされない場合や、使用量が増加してキャンセルされる場合があります。おそらく、この矛盾した振る舞いは、分類器の非常に明確な決定境界を生成しません。

エラーの別の考えられる原因は、多くのトレーニング例が非常にまばらであるという事実です(つまり、使用量がゼロの状態で何日も)。私がまだ試していないアイデアの1つは、時系列をセグメントに分割し、いくつかの機能をそのように生成することですが、あまり望んでいません。


1
まず第一に、私はあなたが以下の変種を試すことを勧めます。使用状況データを時間/日ごとに集計します。2.トレーニングデータから、これらの時系列のプロットを重ね合わせて、2つのグループ内のパターンを確認します。3.データによく適合するさまざまな時系列/回帰モデルを探索します。4.モデル係数を分類器の機能として使用します。
ramhiser 2013

私はあなたの特徴抽出技術が好きです。やってみます。私のデータはまばらすぎてパターンを見つけることができないと確信しましたが、誰が知っていますか。ありがとう!
user1893354 2013

回答:


13

距離メトリックとして動的時間ワーピングを使用するKNNを適用することで、かなりの成功を収めました。

私の研究(pdf)は、このアプローチは打ち負かすのが非常に難しいことを示唆しています。以下の回路図は、github上のKNNおよびDTWの私のpython実装からのものです。またはIPython Notebookで表示

KNNおよびDTW

トレーニングデータセットが非常に大きい場合は、距離行列の階層的クラスタリングを実行することをお勧めします。次に、目的のクラスターからサンプリングして、より小さいトレーニングデータセットを生成します。これhclustにより、データの幅広い時系列特性を表す時系列が確実に得られます。


4
研究論文へのリンクを更新していただけませんか?
tilaprimera


10

時系列分類への2つのアプローチ

分類タスクの時間構造化入力を処理する方法には2つの方法があります。

  1. 専用の時系列モデル:機械学習アルゴリズムは、時系列を直接組み込みます。このカテゴリでは、DTWモデルを使用したKNNを数えます。
  2. 特徴ベースのアプローチ:ここでは、時系列が別の、おそらくより低次元の表現にマップされます。つまり、特徴抽出アルゴリズムは、時系列の平均値や最大値などの特性を計算します。次に、フィーチャはフィーチャマトリックスとして、ニューラルネットワーク、ランダムフォレスト、サポートベクターマシンなどの「通常の」機械学習に渡されます。このアプローチには、結果をよりよく説明できるという利点があります。さらに、教師付き機械学習のよく発達した理論を使用することができます。

また、過去にDTWでKNNを正常に展開することにも成功しました。しかし、よく設計された機能を使用するモデルを使用すると、ほとんどの場合、その精度を超えることができました。また、バイナリ分類のDTWを使用するKNNはO(n_t・m_ {train}・m_ {test})を使用してスケーリングします。n_tは時系列の長さ、mtrainおよびmtestはそれぞれトレインおよびテストセット内のデバイスの数です。 。つまり、計算にはかなり時間がかかります。

したがって、機能ベースのアプローチを追求することをお勧めします。

tsfreshは膨大な数の機能を計算します

Pythonパッケージtsfreshは、時系列を含むpandas.DataFrameからそのような機能の膨大な数を計算します。ドキュメントはhttp://tsfresh.readthedocs.ioにあります。

ここに画像の説明を入力してください

大量の特徴を計算するためにそれを試すことができます。後で、特徴の重要度をフィルタリングして、有望な候補を特定できます。

免責事項:私はtsfreshの作者の一人です。


素晴らしい投稿をありがとうございます。時系列が非常に小さい(たとえば、時系列ごとに10データポイント)。その場合、データセットにtsfreshを使用することをお勧めしますか?ありがとうございました:)
EmJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.