デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - 分析初心者に送る!相関係数を1クリックで求めるには? - Linear Correlation

f:id:makkynm:20211231174432p:plain

 

はじめに

こんにちは、自動化大好きまっきーです。2021年もあとわずかですがいかがお過ごしでしょうか。今回は分析の初歩、めちゃめちゃ簡単なのにビジネスでは頻出の相関係数についてです。

それでは始めましょう!

 

 今回のテーマ ~相関係数 Linear Correlation~

f:id:makkynm:20211231155313p:plain

 今回のテーマ ~相関係数 Linear Correlation~

相関係数についての説明は省きますが、非常によく出てくる用語なので知らない方は分析をしているしていない関わらずに一度調べてみるといいと思います。

個人的な感覚は、、

「2つのカラムの関係について、関わりがあるのか・どれほど強いのか、を-1~1の間の数値で示してくれるもの」

というざっくり理解です。

 

覚えてほしいこと

相関係数を求める前にデータの意味を理解する

相関係数を出力することやその他の分析値を出すことはとても簡単です。ただしその数値が本当に正しいのか、その数値は何を意味しているのかを、元データを理解しながら理解していくのが非常に需要です。

その意味で下処理の部分が一番重要だと思うので、データの下処理については私の解説なしでチャレンジしていただいてもいいかもしれませんね。

 

やりたいこと

今回は「日本の月別出生数と年別小学校の数」のデータを使用して、

仮説「小学校の数は出生数と強い相関がある」を検証していきたいと思います。

(この例題を考えるのに2時間かかりました、、笑)

 

事前準備

データのダウンロード

まずはデータをダウンロードします。私のKNIME Hubからダウンロードしていただいてもいいですし、下記のサイトからダウンロードしていただいても構いません。

参考:統計ダッシュボード

 

データの下処理

分析を始めるとき、まず初めに行うのはデータの下処理ですね。データクレンジングとも言います。まずはダウンロードしたcsvを確認し、分析しやすいようなデータにしてあげましょう。

f:id:makkynm:20211231154102p:plain

データの下処理
今回のポイント1 - データの粒度を揃える

今回のデータの下処理でのポイント1つ目は

出生数が月毎になってしまっているので、Joinerを通す前に年単位のデータに直してあげる」ことです。

ちょっとズルしました。本当はDate型にわざわざ変換して、Extract Date&Time Filedで年を抜き出すのがいいとは思うのですが、元データが年から半角4桁で必ず始まっていたので、String Manipulationで最初の4文字を抜き出して終わりにしちゃいました。

 

今回のポイント2 - データの完全性を揃える

今回のデータはダウンロードしたタイミングの問題で、2021年の出生数のデータが途中で終わってしまっていることをデータのチェックの段階で気づいておきましょう。

そうすることで正しい計算をすることができます。

 

Linear Correlationの使い方

相関係数を一発で求めてくれるNodeです。複数カラムを選択して全ての組み合わせをチェックできるマトリックスまで作ってくれるので、いろんな要素があってどれに相関がありそうか、ひとまずパッと確認したい場合などにも有効です。

計算Logic

  • 数値numericカラム×数値numericカラム:ピアソンの積率相関係数(Pearson's product-moment coefficient)。欠損値の場合計算できないので、その行は無視される。Rの statistics package、function cor(<data.frame>, use="pairwise.complete.obs")と同じ計算手法。正の相関がある場合は1、負の相関がある場合は-1の方向で示される。p値と自由度も同時に計算される。
  • nominalカラム <-> nominalカラム (文字列等):  Pearsonのカイ2乗検定 (Pearson's chi square test on the contingency table)クラメールのV (Cramer's V)を使用して、0~1の間に正規化される。0は相関なし、1は相関ありを示す。nominal value(そのカラムで取りうる値の種類)の最大値はConfigurationから指定可能で、この種類を超えた場合はn/aとなる。欠損値も欠損値が1つの値として扱われる。
  • その他のカラムの組み合わせ:計算されずにn/aとして表示される。

 

Workflow - Linear Correlation

f:id:makkynm:20211231155313p:plain

Workflow - Linear Correlation

Workflowは下記リンクからダウンロードできます。

今回はちょっと一言にチャレンジ問題を入れています。私の考えた答えもこのWorkflowに入ってしまっているので、もし自分で考えたい!って方はダウンロードせずにチャレンジしてみてください。

相関係数 - Linear Correlation – KNIME Hub

 

Confirm - Linear Correlation

出力が2つと、Interaction Viewでも確認できるので1つ1つ確認していきましょう。(今回は複数のカラムを選択していませんでしたが、カラムが多い場合はMatrixが非常に使いやすくなってきます。)

Correlation Measure - テーブル形式でp値・自由度とともに相関係数を確認

テーブル形式でp値・自由度とともに相関係数を確認したい場合にはこちらを使用できます。

f:id:makkynm:20211231160826p:plain

Confirm - Correlation Measure
Correlation Matrix - 相関係数を星取表形式で確認する

複数カラムがある場合はこの形式が便利です。次に説明するInteractive Viewとできることは同じなので、こちらはあまり使いませんが、、

f:id:makkynm:20211231161201p:plain

Correlation Matrix
Interactive View Correlation Matrix - 相関係数を星取表形式で確認する(色付き)

複数カラムがある場合はこの表で相関の強さをぱっと見で判断できます。青は正の相関を、赤は負の相関を示しています。

マウスを色のついているマスに置くと、相関係数まで確認することが可能です。今回は数値カラムしか設定していませんが、文字列カラムなどを入れるとN/Aになったりします。

f:id:makkynm:20211231161440p:plain

Interactive View Correlation Matrix

 

Configure - Linear Correlation

f:id:makkynm:20211231162034p:plain

Configure - Linear Correlation
Step1 - Column Selection 相関係数を求めたいカラムを選択

相関係数を求めたいカラムをIncludeに入れていきます。使い方はString Manipulation等散々出てきたと思うので、みなさんよくわかりますね。

 

Step2 - Output Column pairs 計算結果の表示範囲指定

これどう説明しようかと思っていたんですが、、

正直どれでもいいと思っています。ただ、見やすさを重視するのであれば、「only pairs with a valid correlation are included 」を選べばいいと思います。

  • Include all column pairs相関係数計算できる・できないに関わらず全て表示
  • Include only compatible column pairs:必ずn/aとなる数値カラムとnominalカラムの組み合わせを除く
  • Include only pairs with a valid correlation are included:nominalカラムの値の種類上限に引っかかった場合など、全ての相関係数が計算できなかった場合を除く

 

Possible Values Count - nominalカラムの取りうる値の最大値

Nominal Value Filterと同じような感覚ですが、取りうる値が何個までかをここで指定できます。デフォルトでは50種類まで対応可能です。

 

Step3 - p-value 数値カラム同士のp値計算方法の指定

ピアソンの積率相関係数(Pearson's product-moment coefficient)のp値の計算方法の指定です。基本はデフォルトのtwo-sidedでいいと思います。

  • "two-sided": 観察された相関と少なくとも同じ大きな相関値をとる確率に対応 
  • "one-sided (right)" :大きな正の相関を示す相関値をとる確率に対応
  • "one-sided (left)" :大きな負の相関を示す相関値がとる確率に対応

 

ちょっと一言

 チャレンジ問題 - 本当に求めた相関係数は正しいのか? - データ処理について考える

0.82という相関係数を見てどう思いましたか?

「あー、相関強いんだなー」くらいかもしれないですね。もちろんこの方法でもざっくり出生数と小学校の数の間には相関があることは分かるんですが、一度今回処理した方法について考えて、正しく相関係数を求めたのか考えてみてください。

すると、

  • 「入学には6歳からなので出生から入学まで6年の差がある。」
  • 「小学校は1年生から6年生までの合計人数が小学校全体の生徒数になるはず

と気づくかもしれません。

今回求めた方法ではこれらのことが反映できていません。

 

さて、ここで皆さんに問題です。あなたは上の2つの条件をKNIME workflowによる下処理で反映できますか?

ぜひ考えてShare・コメントしてみてください!

私の考えた方法はWorkflowにアップロードしていますのでまっきーはどうやったのか?気になる方はチェックしてみてくださいね。答えは0.86になりましたよ!

 

おわりに

今年は後半になるにつれ仕事内容が変わったり、書くことがなくなってきたり時間がなくなってきたりで更新が止まりつつありましたが、皆さんのおかげもありなんとか細く長く続けられました。また、Contributer of the Monthを受賞できたのも非常にいい経験になりました。

来年はまた新しいことができたら面白いなあと思っているので、引き続き応援いただけると幸いです。いつでもお仕事などお問い合わせお待ちしてます!

それでは、良いお年を!

 

 

 

KNIME Hubワークスペース

makkynm/Public – KNIME Hub

Twitter アカウント

まっきー | デジタル推進課 (@makkynm) | Twitter

 

KNIMEに関する本

KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、

本がいいなーと言う人はぜひ試してみてください。

 

参考リンク 

チャレンジクイズのヒント

私はこれらのNodeでチャレンジクイズの答えを導き出しています。

ぜひ練習問題として利用してみてください!

degitalization.hatenablog.jp

 

degitalization.hatenablog.jp