Die Pearson-Korrelationskoeffizientenformel in SQL
Wie wir auf unserer Seite „Verwenden der PostgreSQL-Korrelationsfunktion“ besprochen haben, kann Ihnen die Verwendung der Korrelation zeigen, wie zwei Zahlenreihen zusammenhängen. Entweder ihre Stärke als positive Korrelation oder ihre Stärke als negative Korrelation und jede Stärke dazwischen, einschließlich überhaupt keiner Korrelation.
Um den Korrelationskoeffizienten noch einmal kurz zusammenzufassen:
Der Korrelationskoeffizient ist eine weit verbreitete Methode zur Bestimmung der Stärke der Beziehung zwischen zwei Zahlen oder zwei Zahlengruppen. Dieser Koeffizient wird als Zahl zwischen -1 und 1 berechnet, wobei 1 die stärkste mögliche positive Korrelation und -1 die stärkste mögliche negative Korrelation ist.
Eine positive Korrelation bedeutet, dass sich die zweite Zahl erhöht, wenn sich eine Zahl erhöht.
Eine negative Korrelation bedeutet, dass die zweite Zahl abnimmt, wenn eine Zahl zunimmt.
Ob das Ergebnis der zweiten Zahl durch die erste verursacht wird oder nicht, wird hier nicht bestimmt, nur dass die Ergebnisse der beiden Zahlen gemeinsam eintreten.
Wenn die Formel 0 zurückgibt, besteht absolut KEINE Korrelation zwischen den beiden Zahlengruppen.
Die Formel von Pearson sieht folgendermaßen aus:
Wie bereits erwähnt, gibt es Möglichkeiten, die Pearson-Formel für eine Menge von Zahlen in SQL zu berechnen.
Wir haben es hier mit einem Zahlensatz aus unserer Demo-Datenquelle gemacht, die mit einer Testversion kostenlos ist.
Diese Formel in SQL sieht folgendermaßen aus:
((tot_sum - (amt_sum * act_sum / _count)) / sqrt((amt_sum_sq - pow(amt_sum, 2.0) / _count) * (act_sum_sq - pow(act_sum, 2.0) / _count)))
Und in einer ganzen Abfrage wie dieser verwendet:
SELECT
((tot_sum - (amt_sum * act_sum / _count)) / sqrt((amt_sum_sq - pow(amt_sum, 2.0) / _count) * (act_sum_sq - pow(act_sum, 2.0) / _count))) AS "Corr Coef Using Pearson"
FROM(
SELECT
sum("Amount") AS amt_sum,
sum("Activities") AS act_sum,
sum("Amount" * "Amount") AS amt_sum_sq,
sum("Activities" * "Activities") AS act_sum_sq,
sum("Amount" * "Activities") AS tot_sum,
count(*) as _count
FROM(
SELECT
DATE_TRUNC('day', p.payment_date)::DATE AS "Day",
SUM(p.amount) AS "Amount",
COUNT(DISTINCT a.activity_id) AS "Activities"
FROM
public.payments p
INNER JOIN public.subscriptions s ON p.subscription_id = s.subscription_id
INNER JOIN public.users u ON s.user_id = u.user_id
INNER JOIN public.activity a ON a.user_id = u.user_id
GROUP BY 1) as a
) as b
GROUP BY tot_sum, amt_sum, act_sum, _count, amt_sum_sq, act_sum_sq
Was wir von dieser Abfrage sehen würden, ist genau das, was wir sehen würden, wenn wir die Funktion corr() in PostgreSQL verwenden: