
ThoughtSpotのSpotIQ分析の「相互相関」についてご紹介します
AkimasaKajitaniです。今回は、SpotIQ分析の「相互相関について試してみたいと思います。
SpotIQ分析の相互相関とは?
SpotIQの相互相関分析は、「相互相関分析」(Cross-correlation analysis)という手法であり「2つの異なる時系列データが時間的なズレを考慮しながらどの程度類似しているか」を分析する手法です(いわゆる一般的な「相関」、つまり2つの数値項目において片方の値があがるともう一方もあがるかどうか、といった分析とは異なる分析をしているので混同しないようご注意願います)。
そのため、基本的に分析対象は時系列データとなります。日付項目だけ入っていれば、各数値項目間の相関があるかどうかを分析してくれます(ただし、元の検索トークンの属性項目は数値以外無視されます)。もちろん日付項目は日時型である必要があります。
細かいアルゴリズムはドキュメントにも記載されていませんが、時間方向にずらした時にどれだけ波形が類似しているか、というのを計算するのがざっくりしたアルゴリズムです。
なお、日付項目ではない属性データのみでも一応結果を出すことは可能です(その場合、「列の選択」で選択する属性項目が対象となります)。
「相互相関」を行うためには?
SpotIQの相互相関を行うためには、時系列データを作成する必要があります。チャートタイプは特に選びませんが、極端な話円グラフでも良いです。ただ、わかりやすくするためには折れ線グラフや棒グラフ(列グラフ)などでグラフを作ると良いかと思います。
例えば、以下のように検索してみます。

相互相関では、属性項目が検索バーに入っていても無視されるため、今回は抜いています。もちろん、入っていても構いません(入っていたとしても評価されません)。また、ここにないメジャーもあとで分析に含めることが可能です。

3点メニューから「SpotIQ分析」を選択します。

以下の分析タイプ選択画面で「相互相関」を選択し、「次へ」をクリックします。

次に、列を選択の画面が出ます。ここでは相関を見たい数値項目を追加しましょう。属性項目は追加しても使われないため選択する必要はありません。

その他、この画面では細かいパラメータのカスタマイズが可能です。
「分析」ボタンをクリックすると、分析が開始され、少しすると完了します。完了したら「分析を見る」ボタンが出てくるので、これをクリックしてください。

結果としては、以下のようなものが今回得られました。右端にある「>」ボタンをクリックすると、別のインサイトを見ることができます。

右向きボタンを一回押してみると、販売価格と利益の関係が出てきました。

相互相関分析では、遅延、相関係数といった言葉が登場します。相関係数は-1から1の間で絶対値が1に近いほど相関性が高いです。逆に0に近い場合、相関がない、ということになります。

以下はまた別のケースですが、「遅延 -24ヶ月」といった言葉が出てきています。

相互相関は、時間方向にずらして相関を見るため、ずらした時に相関があれば、そのズレを「XXヶ月」、ずらさなくても相関がある場合「遅延なし」といった形で表現してくれます。
相関係数はもちろん相関の強さです。
パラメーターのカスタマイズについて
パラメータのカスタマイズ画面について見てみましょう。基本的に各機能共通のカスタマイズ設定と、各分析手法ごとの設定に分かれています。なお、この設定自体はワンショットの使い捨てになるのでご注意ください(ここで一度設定しても、再度SpotIQ分析を行う際、設定値はリセットされています)。

SpotIQの共通設定
SpotIQの共通設定は以下のとおりです。
- 分析を現在の結果セットに限定
- null値を現在の分析から除外
- メジャー値0を現在の分析から除外
- 現在の分析の日付境界を自動調整する
「分析を現在の結果セットに限定」は相互相関分析ではあまり重要性の高くないオプションです。このオプションをオンにすると、検索トークンに含まれている項目のみでSpotIQ分析を行います。
null値や0を除外するというのは、元データ内でnull値や0がどのような意味を持っているか、で設定を変更する必要があります。例えば、アイテムが存在しない場合や、nullの代わりに0が入っているような場合などは分析対象から除外すべきでしょう。
その他、メジャー列の最大数、属性列の最大数はそれぞれ0~3の範囲で設定可能ですが、特に変更する必要はないと思われます(どちらかというともっと増やしたいかと思いますが、3が最大のようです)。
現在の分析の日付境界を自動調整するオプションは、ドキュメントでは以下の通り説明されています。
「日付境界の自動調整」がtrueに設定されている場合、クエリに日付時刻フィルターがない場合はThoughtSpotは最小日付と最大日付の両方を除外します。フィルターが含まれている場合はThoughtSpotはクエリに明示的に含まれている日付を含めつつ、極端な日付ポイントを削除します。
相互相関の詳細設定
スクショが途切れているので相互相関の詳細設定のスクショを掲載したいと思います。細かい値のカスタマイズについてはこちら に詳しく書かれています。

分析に必要な最小行数では、分析に必要な最小行数の設定が可能ですが、減らせばその分精度は落ちます。最低2ポイントは必要です(0にも設定ができますが・・・)。
最小相関係数は、相関がある、と決めるためのしきい値で、この値より大きな相関係数が得られた場合、インサイトとして選択されます。負の相関を発見したい場合、-1などと設定します。基本的に相関係数が-0.5~0.5の場合、相関がない、とされます。
最大相関係数は、ドキュメントには「この値は正の数の場合は最小係数より高く、負の数の場合はその逆」と記載されていますが、若干誤りがあります。ドキュメントにあるように、最大相関係数は、最小値より小さな値を設定できません。つまり、正の数でも負の数でも、最大相関係数は、最小係数より高い値を設定しなければなりません。負の相関を発見したい場合、-0.7などと設定します(この時、最小相関係数は-1などと入力します)。
最大相関ラグは、相関を取る時に許容するズレの大きさです。ここで指定した期間以内のズレの中で相関関係を見つけます。大きくすると、その分対象となるものが多くなります
その他できること
右上にあるメニューにて「インサイトの保存」もできますが、それ以外に以下のことが可能です。

分析のカスタマイズは、どのようなオプションで分析を行ったのか確認できる機能です。
スケジュール分析は、定期的に同じオプションでSpotIQ分析を行う機能です。

さらに、SpotIQで作成された各チャートはチャート内の3点メニューからライブボードへのピン留めやダウンロード、同期、分析の詳細の確認などができます。「コピーの作成」を行えば、チャートを自分でカスタマイズすることも可能です。

分析詳細については、アルゴリズムが共通して「Cross correlation」としか出ないので、相互相関分析ではあまり使うことはないかと思います。

属性で相互相関を行う
相互相関では、時系列データに対して行う、というのが基本ですが、実は属性に対して行うことが可能です。かなり特殊なやり方になりますのでご紹介します。
まず、検索トークンとしては日付列を入れてはいけません。また、属性列もここでは入れません(ここで属性列を入れても無視されるため)。

その後、SpotIQを起動し、相互相関を選択します。
「列を選択」がポイントです。ここで、追加の数値項目と相関分析を行いたい属性を追加します。日付項目は選択しないでください。属性も1つにしてください(複数追加しても1つしか結果が出てきません)。

これで分析を実行すると、以下のようなインサイトが得られます。

各数値項目が、属性ごとに同じような動きになっているかどうか、というのが相関関係として出てきます。
ただし、元々時系列データ用なので、Interval付きで結果が出ることがあります。属性の場合、Intervalは関係ないので、結果としては必要ありません。

このようなデータがじゃまな場合、最大相関ラグを0にすることででなくすることができます。
属性項目内のアイテムごとの相互相関
相互相関では属性でフィルタしながら相関を出すことはできません。
例えば、出荷モードという項目があり、「通常配送」「プレミアム配送」間に相関があるのかどうか調べたい、ということは多いかと思います。この場合、数式でIF文を使って、各属性項目ごとの数値項目を作って分析することができます。

これを分析したい項目数だけ作成し、分析対象の数値項目とすれば、相互相関分析を属性のアイテムごとに実行することができます。
制約事項とベストプラクティス
制約事項
- SpotIQ分析では、Group_Aggregation 系の関数は利用できません。
ベストプラクティス
- 時系列データになれば良いので、日付項目と分析したい数値項目を複数入れたチャートを作成するだけです。元の属性は無視されるため、日付項目と相互相関を見たい数値項目が複数入ったチャートを作成し、相互相関分析を実行しましょう。
参考URL
What are the spotIQ algorithms
SpotIQ analysis | ThoughtSpot documentation
運営会社
