Korrelaatio

Määrällisten muuttujien välisiä riippuvuuksia selvitellään korrelaatiokertoimien ja hajontakaavioiden avulla.

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

plt.style.use('seaborn-whitegrid')
In [2]:
# Data, jossa yritysasiakkaiden mielikuvia tavarantoimittajayrityksestä
# Asteikko: 0 = huono - 10 = erinomainen
df = pd.read_excel('http://taanila.fi/data3.xlsx')
df.head()
Out[2]:
nro toimitusnopeus hintataso joustavuus hinnoissa toimittajan imago palvelu myyntihenkilöstön imago tuotteiden laatu yleinen tyytyväisyys
0 1 4.1 0.6 6.9 4.7 2.4 2.3 5.2 4.2
1 2 1.8 3.0 6.3 6.6 2.5 4.0 8.4 4.3
2 3 3.4 5.2 5.7 6.0 4.3 2.7 8.2 5.2
3 4 2.7 1.0 7.1 5.9 1.8 2.3 7.8 3.9
4 5 6.0 0.9 9.6 7.8 3.4 4.6 4.5 6.8
In [3]:
# Pudotan nro-sarakkeen pois
df = df.drop('nro', axis=1)
In [4]:
# Korrelaatiokertoimet
df.corr()
Out[4]:
toimitusnopeus hintataso joustavuus hinnoissa toimittajan imago palvelu myyntihenkilöstön imago tuotteiden laatu yleinen tyytyväisyys
toimitusnopeus 1.000000 -0.349225 0.509295 0.050414 0.611901 0.077115 -0.482631 0.650632
hintataso -0.349225 1.000000 -0.487213 0.272187 0.512981 0.186243 0.469746 0.028395
joustavuus hinnoissa 0.509295 -0.487213 1.000000 -0.116104 0.066617 -0.034316 -0.448112 0.524814
toimittajan imago 0.050414 0.272187 -0.116104 1.000000 0.298677 0.788225 0.199981 0.475934
palvelu 0.611901 0.512981 0.066617 0.298677 1.000000 0.240808 -0.055161 0.631233
myyntihenkilöstön imago 0.077115 0.186243 -0.034316 0.788225 0.240808 1.000000 0.177294 0.340909
tuotteiden laatu -0.482631 0.469746 -0.448112 0.199981 -0.055161 0.177294 1.000000 -0.283340
yleinen tyytyväisyys 0.650632 0.028395 0.524814 0.475934 0.631233 0.340909 -0.283340 1.000000
In [5]:
# Seaborn-kirjaston heatmap väritää korrelaatiokertoimia
sns.heatmap(df.corr(), annot=True)
Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0x2368c261390>
In [6]:
# Korrelaatioiden visuaalinen tarkastelu hajontakaavioina
sns.pairplot(df, kind='reg')
Out[6]:
<seaborn.axisgrid.PairGrid at 0x2368c1c9438>

Ovatko korrelaatiokertoimet tilastollisesti merkitseviä?

Otoksessa havaitut korrelaatiokertoimet voivat olla liian lähellä nollaa, jotta niitä voisi yleistää laajempaan perusjoukkoon, josta otos on otettu. Kyseessä voi olla otantavirheen (sattuman) aiheuttama korrelaatio.

Korrelaatiokerrointa sanotaan merkitseväksi, jos sen perusteella voidaan tehdä yleistys laajempaan perusjoukkoon, josta otos on otettu. Korrelaatiokertoimen merkitsevyyttä voit testata laskemalla niin kutsuttu p-arvo. Mitä pienempi p-arvo, sitä merkitsevämpi korrelaatio. Yleensä alle 0,05 (5 %) suuruisia p-arvoja pidetään osoituksena merkitsevästä korrelaatiosta.

Korrelaatiokertoimeen liittyvän p-arvon voit laskea siihen tarkoitetulla testillä (pearsonr).

In [10]:
from scipy.stats import pearsonr
for var in df:
    print(var, pearsonr(df['yleinen tyytyväisyys'], df[var]))
toimitusnopeus (0.6506323301389189, 2.35435720980337e-13)
hintataso (0.02839466588051024, 0.7791450989655226)
joustavuus hinnoissa (0.5248141510750398, 2.0815396346392604e-08)
toimittajan imago (0.47593383142600115, 5.599028749180166e-07)
palvelu (0.631232901641948, 1.917952074232069e-12)
myyntihenkilöstön imago (0.34090930276068393, 0.0005188847493396771)
tuotteiden laatu (-0.28333980318451, 0.004282584841192072)
yleinen tyytyväisyys (1.0, 0.0)

Edellä on tarkasteltu eri osatekijöiden korrelaatiota yleisen tyytyväisyyden kanssa. Pearsonr palauttaa kaksi arvoa: korrelaatiokertoimen ja p-arvon.

Lasketun mukaan tilastollisesti merkitsevästi yleisen tyytyväisyyden kanssa korreloivat kaikki muut paitsi hintataso.

Lisätietoa merkitsevyystestauksesta

Tietoa korrelaatiokertoimen testauksesta: https://tilastoapu.wordpress.com/2011/11/01/10-korrelaatio-ja-sen-merkitsevyys/

Lisätietoa p-arvoista: https://tilastoapu.wordpress.com/2012/02/14/p-arvo/

p-arvoja Pythonilla eri testaustilanteisiin: https://nbviewer.jupyter.org/github/taanila/tilastoapu/blob/master/p.ipynb