RのimputeTSパッケージを使った時系列データの欠測値補完

RのimputeTSパッケージを使った時系列データの欠測値補完

ビジネスの世界では、売上やPV数などの時系列データがたくさんあります。

このような時系列データは、いつも完璧なコンディションで存在するわけではありません。

例えば、データの一部が欠損、つまり、欠測値の状態になっていることがあります。

その欠測値を補完するためのパッケージがRにはあります。imputeTSです。

今回は、「RのimputeTSパッケージを使った時系列データの欠測値補完」についてお話しします。

利用データ

今回利用する時系列データのデータセットは、Airline Passengers(飛行機乗客数)です。Box and Jenkins (1976) の有名な時系列データです。サンプルデータとして、よく利用されます。

1955年5月から10月まで(背景が薄い青色の部分)を欠測させます。

欠測させると、以下のようになります。

欠測した1955年5月から10月まで(背景が薄い青色の部分)欠測値補完してみます。

 

imputeTSのインストール

imputeTSパッケージを利用するには、インストールする必要があります。

以下、コードです。

install.packages('imputeTS')

 

今回は、Rでのデータ分析ではお馴染みのtidyverseパッケージも利用しますので、まだインストールシていない方は、インストールしておいてください。

 

紹介する時系列の欠測値補完法

以下の記事で、いくつかの時系列データ欠測値補完法を紹介しました。

この中で、今回はimputeTSで実施可能な以下の欠測値補完法の実行例を説明します。

  • LOCF法
  • 平均値代入法
  • 中央値代入法
  • 線形補間法
  • スプライン補間法
  • 移動平均補間法
  • カルマン平滑化補間法

 

 必要なパッケージの読み込み

先ずは、必要なパッケージを読み込みます。

以下、コードです。

library(tidyverse)
library(imputeTS)

 

 データセットの読み込み

次に、データセットを読み込みます。

以下からダウンロードできます。

AirPassengers_IMP.csv
https://www.salesanalytics.co.jp/pf7x

 

このURLから直接データセットを読み込めます。

以下、コードです。

AirPassengers <- read_csv("https://www.salesanalytics.co.jp/pf7x")

AirPassengers$Month <- as.Date(AirPassengers$Month) #日付型に変換

Passengers <- AirPassengers$Passengers

 

データの状況を、要約統計量で確認してみます。

以下、コードです。

summary(Passengers)

 

以下、実行結果です。

 

NAが欠測値を意味します。欠測値が6箇所あることが分かります。

グラフ化してみます。

以下、コードです。

AirPassengers %>% 
    ggplot() + 
    geom_line(aes(x = Month, y = Passengers, group = 1)) +
    annotate("rect", 
             xmin = as.Date("1955-05-01"), 
             xmax = as.Date("1955-10-01"), 
             ymin = -Inf, 
             ymax = Inf,  
             fill = "blue", 
             alpha=.1)

 

以下、実行結果です。

 

imputeTSには、欠測値の状況をグラフ化し見える化するための機能(関数)があります。こちらの方が簡単にグラフ化できます。

以下、コードです。

ggplot_na_distribution(Passengers)

 

以下、実行結果です。

 

では、色々な手法を使い欠測値補完してきたいと思います。

 

 LOCF法

LOCF法欠測値補完します。

以下、コードです。

imp <- na_locf(Passengers, option = 'locf')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 平均値代入法

平均代入法欠測値補完します。

以下、コードです。

imp <- na_mean(Passengers, option = 'mean')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 中央値代入法

中央値代入法欠測値補完します。

以下、コードです。

imp <- na_mean(Passengers, option = 'median')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 線形補間法

線形補間法欠測値補完します。

以下、コードです。

imp <- na_interpolation(Passengers, option = 'linear')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 スプライン補間法

スプライン補間法欠測値補完します。

以下、コードです。

imp <- na_interpolation(Passengers, option = 'spline')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 移動平均補間法

移動平均補間法欠測値補完します。

以下、コードです。

imp <- na_ma(Passengers, k = 3)

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

 カルマン平滑化補間法

カルマン平滑化補間法欠測値補完します。

以下、コードです。

imp <- na_kalman(Passengers, model ='auto.arima')

 

グラフ化しどのように補完したのかを確認します。

以下、コードです。

ggplot_na_imputations(Passengers, imp)

 

以下、実行結果です。

 

赤いところが欠測値補完した箇所です。

 

まとめ

今回は、「RのimputeTSパッケージを使った時系列データの欠測値補完」についてお話ししました。

Pythonで実施するときどうすればいいのか、ということで、別途Python版も紹介します。

残念ながらPythonにはimputeTSのような便利なパッケージがないので、PythonからRimputeTSを呼び出して利用する、という方法を紹介します。

Pythonでの時系列データに対する欠測値補完方法