このページでは、Power BIで回帰分析を行う方法を紹介します。DAX関数を使用して簡単に最小二乗法で回帰分析を実施します。
使用する関数:LINESTX
回帰分析とは?基本を押さえよう
回帰分析は、変数間の関係を数学的にモデリングし予測や解析を行う手法です。データの傾向を見つけ出し、未来の予測に役立てるために用いられます。
Power BIでは、回帰分析のためのDAX関数が準備されており、最小二乗法を使用して計算を行います。
最小二乗法は、観測されたデータとモデルの予測値との差(誤差)の二乗和が最小になるように、モデルのパラメータを推定する方法です。この方法により、データの特長や傾向を示する直線を見つけることができます。
Power BIで回帰分析を行う方法
Power BIの散布図に傾向線を作成することはできますが、直線の傾きや切片を値として計算することはできず、そのため予測値を計算することが難しいです。
DAX関数には、回帰分析を行うための関数、LINESTX関数が存在します。この関数を使用して、直線の傾きや切片を計算します。
=LINESTX(“テーブル名”,[データY],[データX],オプション)
//散布図を作成する際に、Y軸に表示するデータを[データY]、X軸に表示するデータを[データX]とする。
//オプションは、切片を0として計算するか否かのオプション。FALSE指定で切片を0にする。
LINESTX関数は1行のテーブルを作成する関数です。作成したテーブルの列名は固定で、各列名を参照することで、計算結果を確認することができます。
LINESTX関数の使用方法
サンプルデータを基に、LINESTX関数の基本的な使用方法を紹介します。
使用するデータ
下記の、サンプルデータを使用します。データ数は100個、テーブルはSample_Data、列名をX、Yとします。
LINESTX関数の基本的な使用方法
テーブルを作成する関数なので、モデリングタブから、新しいテーブルを選択、DAX関数を記述します。
Regression_analysis = LINESTX(Sample_Data,[Y],[X])
下記の1行のテーブルが作成されました。
各列の簡単な説明を記載します。詳細な説明はここでは割愛します。
列名 | 日本語 | 簡単な説明 |
---|---|---|
Slope1 | 傾き | 直線の傾き |
Intercept | 切片 | 直線のy切片 |
StandardErrorSlope1 | 傾きの標準誤差 | データの直線関係性の評価。小さいほど直線性 |
StandardErrorIntercept | 切片の標準誤差 | 切片の評価。小さいほど真の切片に近い。 |
CoefficientOfDetermination | 決定係数(R^2) | 0から1の範囲。1に近いほど推定された回帰式の当てはまりが良い。(予測精度が良い。) |
StandardError | 推定値の標準誤差 | 推定したyと実際のyのばらつきを示す。小さいほど正確 |
FStatistic | F 統計 | モデルの有意性のための統計量。F分布表と比較。 |
DegreesOfFreedom | 自由度 | データ数-1-1で計算する。(分母の自由度) |
RegressionSumOfSquares | 回帰平方和 | モデルのデータ変動の指標。大きいほど高予測性能 |
ResidualSumOfSquares | 残差平方和 | 予測値の正確性。小さいほど予測値と実データが近い。 |
F分布表と比較する場合、分子の自由度は1になります。(独立変数が1つのため。)
直線の傾き(Slope1)と切片(Intercept)を計算するだけでなく、作成したモデルの性能を評価するための指標も計算してくれます。
明示的に各数値を取り出したい場合は下記の様にすると値をして取得できます。
LINESTX関数の応用的な使用方法
計算式を表示する
LINESTX関数で計算した傾きと切片を使用して計算式を文字列データとして作成してます。。
新しいメジャーから、下記の計算式を入力、メジャーをカードで表示しています。
画像内では、SELECTCOLUMNS関数の第2引数に赤線が表示されていますが、問題なく動作します。
メジャー記述時には、regressionテーブル内に[slope1]、[intercept]例の確認できないためだと思います。
計算式 =
var regression = LINESTX(Sample_Data,[Y],[X])
var slope = SELECTCOLUMNS(regression,[slope1])
var intercept = SELECTCOLUMNS(regression,[intercept])
RETURN
"y = " & VALUE(ROUND(slope,2)) & "x + " & VALUE(ROUND(intercept,3))
散布図に回帰直線を引く方法は、視覚化の分析タブから傾向線の項目で設定できます。
予測値を計算する
計算した傾きと切片を使用して、任意の値(y)を計算する方法を紹介します。
新しいテーブルから下記のDAX式を入力し、予測値を計算するためのxのデータテーブルを作成します。今回は、モデルを作成するために使用するデータの最大値と最小値を使用して、0.1刻みのデータテーブルを作成します。
テーブル名は計算範囲とし、列名はValueになります。
計算範囲 = GENERATESERIES(ROUND(MIN(Sample_Data[X]),1),ROUND(MAX(Sample_Data[X]),1),0.1)
作成したテーブルに新しい列を追加し、予測値を計算します。
予測値 =
var regression = LINESTX(Sample_Data,[Y],[X])
var slope = SELECTCOLUMNS(regression,[slope1])
var intercept = SELECTCOLUMNS(regression,[intercept])
RETURN
slope*[Value]+intercept
Valueを基にした予測値を計算することができました。
モデルの作成に使用したデータの範囲外の値を使用して値を予測することは、回帰分析の仕組み上適していません。注意が必要です。
まとめ
- LINESTX関数を使用して、回帰分析の傾きと切片を計算する。
- LINESTX関数はテーブルを作成する関数。
- 計算した傾きや切片を使用して、計算式の表示方法と値を予測する方法を紹介した。
関連記事