Splunkで相関係数を計算する
はじめに
Splunkを使ってデータ分析する時のメリットの一つに、様々な種類のデータから相関分析できるというのがあります。
たとえば、WebサーバのアクセスログとロードバランサのアクセスログをSplunkに取り込むことで、どちらにボトルネックが発生しているのか分析することができます。
※実際のボトルネック特定には他に原因となる要素がたくさん考えられますが、ここではあくまで例としてお考えください。
ところで、異なる2種類のデータがどの程度相関しているのか?ということを統計学的に表す指標として相関係数というのがあります。
この相関係数は以下の数式で計算することができます。
参考サイト:相関係数の意味と求め方 - 公式と計算例
この相関係数に関してSplunkでは専用のコマンドcorrelate
があるようですが、今回、数式に従って計算してみました。
※今回はサーチ文だけで実現してみます。
Splunkを使った相関係数のサーチ例
以下のサーチ文は、mainインデックスに入っているデータのamountフィールドの月ごとの合計と件数の相関係数を計算する例になります。
index="main" amount="*"
| eval i=Case(
date_month="january","01",
date_month="february","02",
date_month="march","03",
date_month="april","04",
date_month="may","05",
date_month="june","06",
date_month="july","07",
date_month="august","08",
date_month="september","09",
date_month="october","10",
date_month="november","11",
date_month="december","12"
) ```月を数値に変換する```
| stats count(amount) as x, sum(amount) as y by i ```月ごとの合計を計算する```
| eventstats
avg(x) as avg_x,varp(x) as varp_x,stdevp(x) as stdev_x,
avg(y) as avg_y,varp(y) as varp_y,stdevp(y) as stdev_y
```xとyのそれぞれの平均,母分散,母標準偏差を計算する。avg:平均、varp:母分散、stdevp:⺟標準偏差```
| eval
avg_x=round(avg_x,2),varp_x=round(varp_x,2),stdev_x=round(stdev_x,2),
avg_y=round(avg_y,2),varp_y=round(varp_y,2),stdev_y=round(stdev_y,2) ```四捨五入する```
| eval dev_x=x-avg_x,dev_y=y-avg_y ```dev:xとyのそれぞれの偏差を計算する```,
cov_tmp=round(dev_x*dev_y,2)
| eventstats avg(cov_tmp) as cov ```cov:xとyの共分散を計算する```
| eval cov=round(cov,2) ```四捨五入する```,
cor_r=round(cov/(stdev_x * stdev_y),2) ```cor_r:xとyの相関係数を計算する```
※補足(マクロについて)
※上記サーチ文に書かれているマクロはSplunk8.1.0以上のバージョンでのみ使用できます。
結果の見方
算出された相関係数に応じて、2種類のデータがどの程度相関しているか判断することができます。
他の実現方法について
今回はSplunkの標準機能のみで相関計算の公式に従った形でサーチ文を作ってみました。
numpyなどのライブラリを用いたカスタムコマンドを作ったり、別途外部Add-Onを入れることで計算する方法もあると思います。※
もっと上手い計算方法があればぜひご意見お願いします!
※特にデータ量が多い時eventstatsコマンドの処理に時間がかかりそう。
参考サイト
Author And Source
この問題について(Splunkで相関係数を計算する), 我々は、より多くの情報をここで見つけました https://qiita.com/bashi100kmrun/items/de1691e8d7db5b98de1b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .