ビジネスの現場で登場するデータの多くは時系列データですが、通常のテーブルデータと同様に欠測値や外れ値なども、当然ながら発生します。
時系列データの一部に欠測値(データがない)がある場合、どうすればいいでしょうか。
テーブルデータの場合、例えば次のような3つの方略があります。
- 欠測値のあるレコードを削除する
- 欠測値のある変数を削除する
- 欠測値を別の値で補完する
時系列データの場合、若干不安定でも「欠測値を別の値で補完する」という欠測値補完の方略を取るケースが多いです。
いくつか方法があります。例えば、以下です。
- LOCF法
- 平均値代入法
- 中央値代入法
- 最近傍補間法
- 線形補間法
- 多項式補間法
- スプライン補間法
- 移動平均補間法
- カルマン平滑化補間法
……などなど。
今回は、「知っておいて損のない時系列データの欠測値補完方法」というお話しをします。
Contents
欠測値に対する3つの方略
テーブルデータの場合、例えば次のような3つの方略があります。
- 欠測値のあるレコードを削除する
- 欠測値のある変数を削除する
- 欠測値を別の値で補完する
あるレコードに対し、欠測値が多い場合、そのレコードそのものを削る方略が「欠測値のあるレコードを削除する」という方略です。
時系列データの場合、当然ですが時系列性が重要になるので、レコードを積極的に削り時系列性を破壊するこの方略は取り難いです。
ある変数の欠測値が多い場合、その変数そのものを削る方略が「欠測値のある変数を削除する」という方略です。
時系列データの場合、目的変数yに欠測値が多い場合、データ分析そのものを諦めるか、ある程度の期間の時系列データが貯まるのを待ちます。
ある説明変数Xに欠測値が多い場合には、テーブルデータと同様の方略を取ることでしょう。要は、その変数を削るということです。ただ、非常に重要な変数であれば、ある程度の期間の時系列データが貯まるのを待ちます。
そもそも、欠測値が多い時系列データは、ある程度の期間の時系列データが貯まるのを待った方がいいでしょう。
一番多いのが、ある1時点だけ欠測しているとか、ある期間だけ欠測しているとか、そういうパターンです。
そのようなときは、若干不安定でも「欠測値を別の値で補完する」という欠測値補完の方略を取る方がいいでしょう。
その方法はいくつかあります。
冒頭に紹介した例えば、以下の方法です。
- LOCF法
- 平均値代入法
- 中央値代入法
- 最近傍補間法
- 線形補間法
- 多項式補間法
- スプライン補間法
- 移動平均補間法
- カルマン平滑化補間法
……などなど。
他にもありますが、今回はそれぞれについて、簡単に説明します。
利用データ
今回利用する時系列データのデータセットは、Airline Passengers(飛行機乗客数)です。Box and Jenkins (1976) の有名な時系列データです。サンプルデータとして、よく利用されます。
1955年5月から10月まで(背景が薄い青色の部分)を欠測させます。
欠測させると、以下のようになります。
欠測した1955年5月から10月まで(背景が薄い青色の部分)を欠測値補完してみます。
LOCF法
LOCF(Last Observation Carried Forward)法とは、欠測している状態より前のデータの中から、最後に観測された値(例では、1955年4月の値)を使って欠測値補完されます。
平均値代入法
平均値代入法とは、平均値を計算し、その平均値で欠測値補完します。
中央値代入法
中央値代入法とは、中央値を計算し、その中央値で欠測値補完します。
最近傍補間法
最近傍補間法とは、最も近い欠測していないデータの値で、欠測値補完します。
線形補間法
線形補間法とは、欠測している期間の前と後を、直線(1次関数)で結び欠測値補完します。
多項式補間法
直線(1次関数)を使い欠測値補完をするのが、線形補間法です。
それを拡張し、多項式(2次以上の関数)を使い欠測値補完をするのが、多項式補間法です。
スプライン補間法
1次間数や2次関数などではなく、スプライン関数を使い欠測値補完をするのが、スプライン補間法です。
移動平均補間法
移動平均補間法とは、移動平均値を計算し、その平均値で欠測値補完します。
カルマン平滑化補間法
カルマン平滑化補間法とは、状態空間モデルなど構築し欠測値補完します。
カルマン平滑化補間法が一番数理的に複雑ですが、今回の例の場合、一番良さそうです。
今回のまとめ
今回は、「知っておいて損のない時系列データの欠測値補完方法」というお話しをしました。
ビジネスの現場で登場するデータの多くは時系列データですが、通常のテーブルデータと同様に欠測値や外れ値なども、当然ながら発生します。
時系列データの一部に欠測値(データがない)がある場合、どうすればいいでしょうか。
テーブルデータの場合、例えば次のような3つの方略があります。
- 欠測値のあるレコードを削除する
- 欠測値のある変数を削除する
- 欠測値を別の値で補完する
時系列データの場合、若干不安定でも「欠測値を別の値で補完する」という欠測値補完の方略を取るケースが多いです。
いくつか方法があります。例えば、以下です。
- LOCF法
- 平均値代入法
- 中央値代入法
- 最近傍補間法
- 線形補間法
- 多項式補間法
- スプライン補間法
- 移動平均補間法
- カルマン平滑化補間法
……などなど。
具体的にどうすればいいのか。
PythonやRで時系列データの欠測値補完方法については、別途説明します。Excelでも、欠測値補完方法のロジックさえ分かれば、欠測値補完は可能です。