交差相関 | package入門(rpnマイスター編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

交差相関

 2つの時系列データがある場合、互いに関連しているかどうかを判断する方法の1つに相関係数があります。では、2つの時系列データにタイミングのズレがある場合はどうなるのでしょうか。

次の時系列Aと時系列Bのデータを見てみましょう。図形が似ているので、何らかの関連性が感じられます。やはり相関係数は高くなるのでしょうか。

  ^y 1  * ** *                          ^**1                         *
  |    *                                |   *                      *
  |           *                         |    *                    *
  |   *              時系列A            |           時系列B
  | *          *                        |     *                 *
  |                                     |
  |              *            21   ⇔   |       *              *    21
  +*--------------------------->        +---------------------------->
  |o              *            *        |o       *            *      x
  |                                     |
  |                *         *          |          *        *
  |                  *                  |
  |                         *           |           *      *
  |                   * ***             |            * ***
  |-1                                   |-1


実は時系列Aはサインカーブ、時系列Bはコサインカーブが元なので、互いの相関係数は次のように簡単に計算できます。-rオプションの21は2π(360°)を刻み数値の.3で割った値です。

  >rpn @r s @r .3 + #r -r 21 >sin.txt
  >rpn @r c @r .3 + #r -r 21 >cos.txt
  >paste sin.txt cos.txt | rpn -c r
  -0.000755055


計算結果がほぼ0に近いことから、時系列Aと時系列Bはほとんど無相関で関連性がないことを示しています。しかし、時系列Aは時系列Bに遅れて値が追従しているだけだとしたら、関連性が出てくるはずです。すると単純に2つの時系列データを付きあわせて、相関を計算するだけでは関係を見過ごしてしまいます。

実際、cosθはsinθよりθがπ/2先行しているだけなので、関連性は大いにあります。


  ^+ +       * *                         +
  |    +   *    *                      +
  |      *        *
  |    * +                           +
  |                 *
  |  *     +                       +
  |                   *
  |          +                   +      21
  +*------------------------------------->
  |o           +        *      +         x
  |                                      *
  |             +         *  +
  |                                    *
  |               +         +        *
  |                 +     +  *     *         * 時系列A (sinθ)
  |-1                 + +      * *           + 時系列B (cosθ)
                        <--------
                     π/2ズレているだけ


そこで、タイミングのズレがあっても関連性があることを気づかせてくれるような方法をrpnマイスターパッケージに用意しました。それが、交差相関を計算するrlagプログラムです。

交差相関とは

 交差相関は2つの時系列データを1つずつずらしながら、相関係数を計算するものです。以下のようなイメージですね。

  時系列A(sin.txt)  時系列B(cos.txt)
         
                    1                     ^
  0                 0.955336     --+      |
  0.29552           0.825336       |      |  1つ
  0.564642          0.62161        |      |     ずらす
  0.783327          0.362358       |      |
  0.932039          0.0707372      |
            :                      |
          (中略)                   |  相関係数の計算範囲
            :                      |
  -0.97753          0.087499       |
  -0.996165         0.377978       |
  -0.925815         0.634693       |
  -0.772764         0.834713       |
  -0.550686         0.96017      --+
  -0.279415


元のデータ数の21個が2つ減って19個で相関係数を計算していることに注意してください。これを2つずらして、3つずらして…計算を繰り返します。次に時系列Bを後方にずらしながら計算します。

見て分かるとおり手作業ではとても面倒な作業で、計算ミスしそうです。そこで、rlagプログラムを使います。さっそく先ほどの時系列Aと時系列Bのデータを使って、交差相関を計算してみましょう。

  >paste sin.txt cos.txt | rpn -c rlag
  -19 1
  -18 0.994543
  -17 0.996462
     :
   (中略)
     :
  -2 -0.545574
  -1 -0.283111
  0 -0.000755055
  1 0.308438
  2 0.587259
     :
   (中略)
     :
  17 -0.988419
  18 -0.976455
  19 -1


一気に計算できていますね。計算結果の1つ目の数字はずらした期間です。-1なら時系列Bを1つ前方にずらした相関係数です。ざっと眺めることで相関係数が高くなるタイミングが分かります。

ずらす数が増えるとデータ数も減るので相関係数の信頼性は落ちます。例えば、末端の±19ではデータ数が2つしかありません。あまりに少ないデータ数の相関係数は無視すべきです。なお、全データ数からずらした数を引けば相関係数に使用したデータ数が分かります。

交差相関によるコレログラム

 データだけでは全体像が見えないので、横軸にずらした期間、縦軸に相関係数をとってグラフ化してみましょう。

  >paste sin.txt cos.txt | rpn -c rlag | xyp -x-19,19 -m
  ******             y^1  ***
        *             |  *   *
         *            |       *
                      | *      *
          *           |
                      |*        *
                      |
  -19      *          |          *      19
  --------------------*------------------>
                     o|                  x
            *       * |           *
                      |
             *     *  |
                  *   |            *
              *  *    |             *
               **     |-1            *****


面白いグラフになりましたね(一種のコレログラム)。グラフを見ると±5くらいで相関係数がピークを打っています。-5で強い逆相関に、+5で強い順相関です。では、実際に前後±5までずらした交差相関の値を見てみましょう。

  >paste sin.txt cos.txt | rpn -c rlag | rpn -5 5 -c lookup
  -5 -0.997287
  -4 -0.926292
  -3 -0.768229
  -2 -0.545574
  -1 -0.283111
  0 -0.000755055
  1 0.308438
  2 0.587259
  3 0.805601
  4 0.94348
  5 0.998094


数値で見ると、±5での相関係数がほぼ±1の強いものであることが分かりますね。注目すべきは5の0.998094です。時系列Aより時系列Bが5つ先行していることになります(時系列Aは時系列Bより5つ遅行している)。

三角関数の計算で使用した-rオプションは21でした。「2π : 21 = x : 5」の関係が成り立つので、5つ分のズレがどれくらいなのか分かります。

  >rpn 2 3.14159 * 5 * 21 /
  1.496


どうも5つのズレはラジアンでの1.496のズレに相当するようです。一方、π/2を計算すると1.57079になります。両者は5%の誤差です。実際、時系列B(cosθ)は時系列A(sinθ)よりπ/2だけ先行しているのですから、交差相関からの結論は大体合っていることになりますね。

タイミングがずれる時系列データの例

 世の中には実にたくさんの指標があります。現状の把握と将来の展望を得ようと、とにかく数値化できるものなら何でも指標化している感じすらあります。とりわけ企業の死活問題になりかねない、景気動向に関する指標も以下のように多く存在します。

この景気動向指数は興味深いことに先行指標、一致指標、遅行指標に分かれています。

先行指標
新規求人数、機械受注、東証株価指数…
一致指標
有効求人倍率、鉱工業生産指数、商業販売額、大口電力使用量…
遅行指標
完全失業率、家計消費支出、法人税収入、サービス業活動指数…

雇用に関してみると、景気が良くなる前に新規求人数は増え始め、景気と有効求人倍率のピークが一致し、景気が悪くなってしばらくしてから完全失業率が増え始めることになるわけです。

一般に一致指標はデータを付き合わせれば、ある程度は認識できます。しかし、先行と遅行指数は一筋縄ではいきません。どうも、時間差が発生するデータは人間にとって感覚的に察知しにくいためか見過ごされることが多いものです。

景気動向指数も長い経験を通して、関連がありそうなデータを先行・遅行指標として見極めていったのかもしれません。rlagプログラムで過去のデータからタイミングがどれくらいずれるのかを割り出しておけば、正確な景気動向を知る手がかりになるでしょう。

先行・遅行指標は利益の源泉となるかもしれません。株価に先行する何らかの指標を見つけることができれば一攫千金も夢ではありません。rlagを使いこなすことで思わぬ関連性が浮かび上がってくるかもしれませんよ。

情報ビジネス統計講座(単回帰編)にあるように、2つの時系列データの相関を感じ取れるセンスがあれば、データ分析で一歩抜きん出ることができます。それに加えて、タイミングのズレを考慮した交差相関を扱うことができれば、分析力はダントツになります。

警告rlagは500個の数値程度を目安に使用してください。

情報本講座で使用したプログラムは、rpnマイスターパッケージとして購入することができます。pasteは講座サポートで公開されています。lookupはユーティリティーパッケージに同梱されています。rはビジネス統計(単回帰編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

rpnマイスターパッケージ

マイスター

ユーティリティー

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら