時系列データの前処理

時系列データはどこにでも表示されます。時系列分析を実行するには、最初にデータを前処理する必要があります。時系列前処理技術は、データモデリングの精度に大きな影響を与えます。

この記事では、主に次の点について説明します。

  • 時系列データの定義とその重要性。

  • 時系列データの前処理ステップ。

  • 時系列データを作成し、欠落値を見つけ、特徴をノイズ除去し、データセットに存在する外れ値を見つけます。

まず、時系列の定義を理解しましょう。

時系列は、特定の時間間隔で記録された一連の均一に分散された観測値です。

時系列の例は、金の価格です。この場合、私たちの観察結果は、一定の時間間隔の後、一定期間にわたって収集された金の価格です。時間の単位は、分、時間、日、年などです。ただし、2つの連続するサンプル間の時間差は同じです。

この記事では、データモデリングの部分に飛び込む前に実行する必要がある、時系列データに関連する一般的な時系列前処理手順と一般的な問題について説明します。

時系列データの前処理

時系列データには多くの情報が含まれていますが、多くの場合、表示されません。時系列に関連する一般的な問題は、タイムスタンプの乱れ、値の欠落(またはタイムスタンプ)、外れ値、およびデータのノイズです。言及されたすべての問題の中で、欠落値の処理は最も難しい問題です。これは、時系列を処理するときに従来の代入(欠落値を置き換えてほとんどの情報を保持することによって欠落データを処理する手法)の方法が適用できないためです。データ。この前処理されたリアルタイム分析を分析するために、KaggleのAirPassengerデータセットを使用します。

時系列データは通常、非構造化形式で存在します。つまり、タイムスタンプが混同され、正しく順序付けられていない可能性があります。また、ほとんどの場合、日時列にはデフォルトの文字列データ型があり、操作を適用する前に、データ時刻列を日時データ型に変換する必要があります。これをデータセットに実装しましょう:

import pandas as pd

passenger = pd.read_csv('AirPassengers.csv')
passenger['Date'] = pd.to_datetime(passenger['Date']) 
passenger.sort_values(by=['Date'], inplace=True, ascending=True)

6a582d0b86f66d2cc6799b6d6165ce6b.png

時系列で欠落している値

時系列データで欠落している値を処理することは困難な作業です。値を受け取る順序が重要であるため、従来の代入手法は時系列データには適していません。この問題を解決するために、次の補間方法があります。

内挿は、一般的に使用される時系列の欠損値代入手法です。周囲の2つの既知のデータポイントを使用して、欠落しているデータポイントを推定するのに役立ちます。この方法はシンプルで最も直感的です。時系列データを操作する場合は、次の方法を使用できます。

  • 時間ベースの補間

  • スプライン補間

  • 線形補間

代入前のデータがどのように見えるかを見てみましょう。

from matplotlib.pyplot import figure
import matplotlib.pyplot as plt

figure(figsize=(12, 5), dpi=80, linewidth=10)
plt.plot(passenger['Date'], passenger['Passengers'])
plt.title('Air Passengers Raw Data with Missing Values')
plt.xlabel('Years', fontsize=14)
plt.ylabel('Number of Passengers', fontsize=14)
plt.show()

620770f266fcdf9e3c7695c208cdc09a.png

上記の3つの方法の結果を見てみましょう。

passenger[‘Linear’] = passenger[‘Passengers’].interpolate(method=’linear’)
passenger[‘Spline order 3’] = passenger[‘Passengers’].interpolate(method=’spline’, order=3)
passenger[‘Time’] = passenger[‘Passengers’].interpolate(method=’time’)

methods = ['Linear', 'Spline order 3', 'Time']

from matplotlib.pyplot import figure
import matplotlib.pyplot as plt
for method in methods:
    figure(figsize=(12, 4), dpi=80, linewidth=10)
    plt.plot(passenger["Date"], passenger[method])
    plt.title('Air Passengers Imputation using: ' + types)
    plt.xlabel("Years", fontsize=14)
    plt.ylabel("Number of Passengers", fontsize=14)
    plt.show()

ec184ac5d4db41611d25af5b1b34a2bf.png

すべての方法で適切な結果が得られます。これらの方法は、欠測値ウィンドウ(欠測データの幅)が小さい場合に意味があります。しかし、いくつかの連続した値が欠落している場合、これらの方法はそれらを推定するのに苦労します。

時系列ノイズ除去

時系列のノイズ要素は深刻な問題を引き起こす可能性があるため、通常、モデルを作成する前にノイズを除去します。ノイズを最小限に抑えるプロセスは、ノイズ除去と呼ばれます。時系列からノイズを除去するために一般的に使用されるいくつかの方法を次に示します。

移動平均

移動平均は、以前の観測のウィンドウの平均であり、ウィンドウは時系列データからの一連の値です。順序付けられた各ウィンドウの平均を計算します。これは、時系列データのノイズを最小限に抑えるのに大いに役立ちます。

Googleの株価に移動平均を適用してみましょう。

rolling_google = google_stock_price['Open'].rolling(20).mean()
plt.plot(google_stock_price['Date'], google_stock_price['Open'])
plt.plot(google_stock_price['Date'], rolling_google)
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.legend(['Open','Rolling Mean'])
plt.show()

47553d0a17d01920b797f6c26d52aedd.png

フーリエ変換

フーリエ変換は、時系列データを周波数領域に変換することでノイズを除去するのに役立ち、ノイズ周波数をフィルターで除去できます。次に、逆フーリエ変換を適用して、フィルター処理された時系列を取得します。フーリエ変換を使用してGoogleの株価を計算します。

denoised_google_stock_price = fft_denoiser(value, 0.001, True)
plt.plot(time, google_stock['Open'][0:300])
plt.plot(time, denoised_google_stock_price)
plt.xlabel('Date', fontsize = 13)
plt.ylabel('Stock Price', fontsize = 13)
plt.legend([‘Open’,’Denoised: 0.001'])
plt.show()

a0d69296c5ff6b3d80a61615a0a6d95a.png

時系列での外れ値の検出

時系列の外れ値は、トレンドラインの突然の急上昇または下降です。外れ値を引き起こすさまざまな要因が考えられます。外れ値を検出するために利用可能な方法を見てみましょう。

ローリング統計に基づく方法

この方法は最も直感的で、ほとんどすべてのタイプの時系列で機能します。このアプローチでは、上限と下限は、平均と標準偏差、ZスコアとTスコア、分布のパーセンタイルなどの特定の統計的尺度から作成されます。たとえば、上限と下限を次のように定義できます。

09d5284f743f2485e8f4097294bae8c8.png

この場合、境界は静的になるため、シリーズ全体の平均と標準偏差を取得することはお勧めできません。境界を作成してから別のウィンドウに転送する一連の連続した観測を検討するのと同じように、境界はローリングウィンドウベースで作成する必要があります。この方法は、効率的で単純な外れ値検出方法です。

孤立森林

名前が示すように、Isolation Forestは、異常検出のための決定木ベースの機械学習アルゴリズムです。これは、決定木のパーティションを使用して、特定の機能セットのデータポイントを分離することによって機能します。つまり、データセットからサンプルを取得し、すべてのポイントが分離されるまでそのサンプルにツリーを構築します。データポイントを分離するには、すべてのポイントが分離されるまで、その機能の最大値と最小値の間の分割を選択してランダムに分割します。フィーチャをランダムに分割すると、異常なデータポイントのツリーに短いパスが作成され、残りのデータと区別されます。

4e5907f7f3b825a88c62ca1f2fb82900.png

K-meansクラスタリング

K-meansクラスタリングは、時系列データの外れ値を検出するためによく使用される教師なし機械学習アルゴリズムです。アルゴリズムはデータセット内のデータポイントを調べ、同様のデータポイントをKクラスターにグループ化します。異常は、データポイントから最も近い重心までの距離を測定することで区別されます。距離が特定のしきい値よりも大きい場合、データポイントは異常としてマークされます。K-Meansアルゴリズムは、比較にユークリッド距離を使用します。

222c9f25997433fd8450bcc873034288.png

可能な面接の質問

人が履歴書に時系列でプロジェクトを書いた場合、インタビュアーはこのトピックから次の可能な質問をすることができます。

  • 時系列データを前処理する方法は何ですか?また、それらは標準の代入方法とどのように異なりますか?

  • 時系列ウィンドウとはどういう意味ですか?

  • 孤独な森について聞いたことがありますか?はいの場合、それがどのように機能するかを説明できますか?

  • フーリエ変換とは何ですか?なぜそれが必要なのですか?

  • 時系列データの欠落値を埋めるさまざまな方法は何ですか?

要約する

この記事では、いくつかの一般的な時系列データ前処理手法について説明します。ソートされた時系列観測から始め、次にさまざまな欠損値代入手法を調べます。順序付けられた一連の観測を処理しているため、時系列代入は従来の代入手法とは異なります。さらに、いくつかのノイズ除去手法がGoogleの株価データセットに適用され、最後にいくつかの時系列外れ値の検出方法について説明します。上記のすべての前処理ステップを使用すると、複雑なモデルを構築する準備ができた高品質のデータが保証されます。

:シャシャンクグプタ

推奨読書:

私の2022年のインターネット学校の採用共有

私の2021年のまとめ

アルゴリズムポストと開発ポストの違いについて話す

インターネット学校の採用研究開発給与の概要

時系列の場合、できることはすべて。

時空間シーケンスの問題とは何ですか?このような問題に主に使用されるモデルはどれですか?主な用途は何ですか?

公開番号:AIカタツムリ車

謙虚に、規律を保ち、進歩を続ける

94ecfc9502149f6f032b50db04358d4d.png

[カタツムリ]を送って「ハンズオンAIプロジェクト」(AIカタツムリカー)のコピーを入手

[1222]を送信して、適切なリートコードブラッシングノートを取得します

[AI Four Classics]を送信して、4つのクラシックAI電子書籍を入手してください

おすすめ

転載: blog.csdn.net/qq_33431368/article/details/123587578