Avainsana-arkisto: Lineaarinen regressio

Lineaarinen regressio 3

Jos koneoppiminen ja sklearn (scikit-learn) -kirjasto ovat sinulle täysin uusia, niin lue ennen tätä artikkelia Lineaarinen regressio 1 ja Lineaarinen regressio 2.

Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:

https://github.com/taanila/tilastoapu/blob/master/linreg3.ipynb

Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.

Tämän artikkelin esimerkkidatana käytän sklearn kirjastosta löytyvää dataa Bostonin asuntojen hinnoista. Artikkelin ideat olen lainannut osoitteesta

https://towardsdatascience.com/linear-regression-on-boston-housing-dataset-f409b7e4a155

Ohjelmakirjastojen tuonti

Kuvailevasta analyysistä tutut peruskirjastot ovat tarpeen:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Datan valmistelu

Lataan esimerkkiaineiston sklearn-kirjastosta seuraavasti:

from sklearn.datasets import load_boston
boston_data = load_boston()

Aineistossa on eroteltu data (features), target (selitettävä muuttuja), feature_names (selittävien muuttujien nimet) ja DESCR (aineiston kuvaus). Tämä selviää keys()-funktiolla:

print(boston_data.keys())

dict_keys([’data’, ’target’, ’feature_names’, ’DESCR’])

Komennolla print(boston_data.DESCR) voit lukea aineiston kuvauksen.

Luon aineiston perusteella boston-nimisen dataframen:

boston = pd.DataFrame(boston_data.data, columns=boston_data.feature_names)
boston['MEDV'] = boston_data.target
boston.head()

linreg9

Selitettävä muuttuja MEDV kuvaa asuntojen mediaanihintoja tuhansina dollareina eri alueilla. Muut muuttujat ovat ehdokkaita mediaanihintaa selittäviksi muuttujiksi (voit lukea lisää aineiston kuvauksesta).

Varmuuden vuoksi kannattaa tarkistaa, onko datassa puuttuvia arvoja:

boston.isnull().sum()

linreg10

Puuttuvia arvoja ei ole, mikä on hyvä asia.

Seuraavaksi katson miten selitettävän muuttujan MEDV arvot ovat jakautuneet. Käytän tarkasteluun seaborn-kirjaston distplot-kuviota ja luokittelen hinnat 30 luokkaan:

sns.distplot(boston['MEDV'], bins=30)

linreg11

Kuvion mukaan asuntojen mediaanihintojen jakauma on oikealle vino. Vinoudesta huolimatta yritetään mallintaa hintoja lineaarisella regressiolla.

Selittävien muuttujien valinnassa voin hyödyntää korrelaatiokertoimia. Seaborn-kirjaston heatmap-funktiolla voin värjätä corr()-funktiolla lasketut korrelaatiokertoimet niiden arvon mukaan. Oletusarvolla heatmap tulostaa vain värilliset ruudut, mutta lisäparametrilla annot=True saan myös korrelaatiokertoimien arvot näkyviin:

correlation_matrix = boston.corr().round(2)
plt.figure(figsize=(12,9))
sns.heatmap(data=correlation_matrix, annot=True)

linreg12

Kaikkein eniten MEDV-muuttujan kanssa korreloivat RM (0,7) ja LSTAT (-0,74). Katson vielä kuvion avulla miltä kyseisten muuttujien korrelaatio MEDV-muuttujan kanssa näyttää. Seuraava koodi toimii vaikka lisäisit enemmänkin muuttujia features-listaan:

features = ['LSTAT', 'RM']
target = boston['MEDV']
plt.figure(figsize=(10, 5))
for i, col in enumerate(features):
   plt.subplot(1, len(features) , i+1)
   plt.scatter(boston[col], target)
   plt.xlabel(col)
   plt.ylabel('MEDV')

linreg13

Riippuvuus on selkeää molemmissa tapauksissa, mutta erityisesti LSTAT-muuttujan kohdalla riippuvuus ei ole täysin suoraviivaista. Tästä huolimatta jatketaan eteenpäin.

Valmistellaan vielä X (features-matriisi) ja y (target) mallintamista varten:

X = boston[['LSTAT', 'RM']]
y = boston['MEDV']

Opetusdata ja testidata

Jos dataa on riittävästi, niin kannattaa jakaa se opetusdataan ja testidataan. Testidatan avulla voidaan arvioida opetusdatan perusteella laadittua mallia. Seuraavassa jaan datan sattumanvaraisesti opetusdataan ja testidataan (20 % datasta). Parametri random_state asettaa satunnaislukugeneraattorin siemenluvun. Jos jätän sen asettamatta, niin saan eri kerroilla erilaisen jaon opetusdataan ja testidataan. Käyttämällä samaa siemenarvoa saan aina saman jaon.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, 
   test_size = 0.2, random_state=5)
print(X_train.shape)
print(X_test.shape)

(404, 2)
(102, 2)

Huomaan, että opetusdatassa on 404 havaintoa ja testidatassa 102 havaintoa.

Mallin sovitus

Mallin sovitukseen kuuluu LinearRegression-mallin tuonti lineaaristen mallien kirjastosta ja mallin sovitus fit-funktiolla.

from sklearn.linear_model import LinearRegression
malli = LinearRegression()
malli.fit(X_train, y_train)

Tuloksesta näen  mallin lähtötiedot, joita olisin halutessani voinut säätää:

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

Mallin sopivuuden arviointi

Mallin sopivuutta arvioin keskivirheen ja selityskertoimen avulla.

RMSE (root mean squared error) eli keskivirhe lasketaan seuraavasti: lasketaan toteutuneiden havaintojen ja mallin ennustamien arvojen erotusten neliöt yhteen ja jaetaan havaintojen lukumäärällä (mean squared error); lopuksi otetaan neliöjuuri.

Mean squared error löytyy sklearn.metrics-kirjastosta:

from sklearn.metrics import mean_squared_error

y_train_predict = malli.predict(X_train)
rmse = (np.sqrt(mean_squared_error(y_train, y_train_predict)))
r2 = malli.score(X_train,y_train)

print('Mallin sopivuus opetusdataan')
print("--------------------------------------")
print('Keskivirhe: {}'.format(rmse))
print('Selityskerroin: {}'.format(r2))
print("n")

y_test_predict = malli.predict(X_test)
rmse = (np.sqrt(mean_squared_error(y_test, y_test_predict)))
r2 = malli.score(X_test, y_test)

print('Mallin sopivuus testidataan')
print('--------------------------------------')
print('Keskivirhe: {}'.format(rmse))
print('Selityskerroin: {}'.format(r2))

Mallin sopivuus opetusdataan
————————————–
Keskivirhe: 5.6371293350711955
Selityskerroin: 0.6300745149331701

Mallin sopivuus testidataan
————————————–
Keskivirhe: 5.137400784702911
Selityskerroin: 0.6628996975186953

Katson vielä kuviona, miten hyvin ennustaminen onnistuu testidatassa:

plt.scatter(y_test, y_test_predict)
plt.xlabel('y_test')
plt.ylabel('y_test_predict')

linreg14

Malli on sitä parempi, mitä lähempänä suoraa viivaa kuvion pisteet ovat.

Mallin parantaminen

Edellä esimerkkinä laskettu malli on kelvollinen, mutta voisin parantaa mallia monin tavoin:

Asuntojen mediaanihinnat eivät ole normaalisti jakautuneet (jakauma on oikealle vino). Mallin parantamiseksi voisin kokeilla jompaa kumpaa seuraavista:

  • pudotan jakauman yläpään suurimmat mediaanihinnat pois opetusdatasta
  • muunnan mediaanihintoja paremmin normaalijakaumaa vastaaviksi.

Selittävien muuttujien ja mediaanihintojen välinen riippuvuus ei ollut aivan suoraviivainen. Tämä saattaisi korjaantua, jos muunnan mediaanihinnat paremmin normaalijakaumaa vastaaviksi. Tarvittaessa voin tehdä myös selittäville muuttujille muunnoksia tai voin valita malliksi ei-lineaarisen mallin.

Malliin voin myös lisätä selittäviä muuttujia. PTRATIO-muuttujan ottamista selittäväksi muuttujaksi kannattaisi kokeilla.

Jos teen korjauksia malliin, niin voin arvioida korjatun mallin sopivuutta vertaamalla sen keskivirhettä ja selityskerrointa tämän artikkelin malliin.

Lineaarinen regressio 2

Jos koneoppiminen ja sklearn (scikit-learn) -kirjasto ovat sinulle täysin uusia, niin lue ennen tätä artikkelia Lineaarinen regressio 1

Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:

https://github.com/taanila/tilastoapu/blob/master/linreg2.ipynb

Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.

Tämän artikkelin esimerkeissä käytän datoja http://taanila.fi/mokki.xlsx ja http://taanila.fi/mokkinew.xlsx

Lineaarisella regressiomallilla voidaan ennustaa jatkuvaluonteisen muuttujan arvoja selittävien muuttujien avulla, jos selittävien muuttujien ja ennustettavan muuttujan välillä on likimain lineaarinen (suoraviivainen) riippuvuus.

Lineaarista regressiomallia voidaan pitää koneoppimisen mallina, jos kone oppii mallin parametrit olemassa olevan datan perusteella.

Tarkastelen esimerkkinä kuvitteellista aineistoa kesämökkien hinnoista. Hintaa selittävinä muuttujina ovat rantaviivan pituus metreinä, mökin pinta-ala neliömetreinä ja dikitominen muuttuja sähköliittymästä (1 = sähköliittymä, 0 = ei sähköliittymää).

Ohjelmakirjastojen tuonti

Tuon kuvailevasta analyysista tutut kirjastot (numpy-kirjastoa en tällä kertaa tarvitse):

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Datan valmistelu

Luen datan Excel-tiedostosta dataframeen:

df=pd.read_excel('http://taanila.fi/mokki.xlsx')
df

linreg4

Muodostan feature-matriisin selittävistä muuttujista ranta, pinta-ala ja sähkö. Selitettäväksi muuttujaksi (target) tulee hinta.

X=df[['ranta', 'pinta-ala','sähkö']]
y=df['hinta']

Mallin sovitus

Tuon lineaaristen mallien kirjastosta LinearRegression-mallin. Mukavuussyistä annan mallille nimeksi malli.

Sovitan mallin dataan fit-funktiolla.

from sklearn.linear_model import LinearRegression
malli=LinearRegression()
malli.fit(X,y)

Tuloksesta näen  mallin lähtötiedot, joita olisin halutessani voinut säätää:

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

Mallin vakiotermi:

malli.intercept_

-96.94145434036429

Selittävien muuttujien kertoimet:

malli.coef_

array([ 1.9750098 ,  2.77578415, 20.29877373])

Mallin sopivuuden arviointi

Mallin selityskerroin:

malli.score(X,y)

0.9819136190845801

Selityskertoimen mukaan 98,2 % hinnan varianssista voidaan selittää selittävien muuttujien avulla.

Mallin sopivuutta voin arvioida myös virhetermejä (ennusteen ero toteutuneeseen hintaan) tarkastelemalla:

plt.scatter(malli.predict(X), malli.predict(X)-y)
plt.hlines(y=0,xmin=50,xmax=250)
plt.xlabel('Ennuste')
plt.ylabel('Poikkeama todellisesta')

linreg5

Virhetermit ovat melko satunnaisesti jakautuneet, mikä on hyvä asia.

Seuraavassa tarkastelen vielä pistekuviona toteutunutta hintaa ja mallin ennustamaa hintaa:

plt.scatter(df['hinta'], malli.predict(X))
plt.xlabel('Todellinen hinta')
plt.ylabel('Ennuste')

linreg6

Ennustaminen

Mallin perusteella voin laskea hintaennusteita uudelle datalle, jota ei käytetty mallin laatimiseen:

Xuudet=pd.read_excel('http://taanila.fi/mokkinew.xlsx')
Xuudet['Hintaennuste']=malli.predict(Xuudet)
Xuudet

linreg7

Perinteisempi regressiotuloste

Halutessani saan perinteisemmän regressiotulosteen statsmodels-kirjaston toiminnoilla:

import statsmodels.api as sm
X = sm.add_constant(X)
malli_sm = sm.OLS(y, X)
results = malli_sm.fit()
print(results.summary())

linreg8

Lineaarinen regressio 1

Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:

https://github.com/taanila/tilastoapu/blob/master/linreg1.ipynb

Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.

Tämän artikkelin esimerkeissä käytän dataa http://taanila.fi/linreg1.xlsx

Yleistä koneoppimisen malleista

Tästä artikkelista opit sklearn (scikit-learn) -ohjelmakirjaston koneoppimisen mallien käyttöliittymän pelkistetyn esimerkin avulla. Käyttöliittymä sklearn-kirjaston malleihin on yksinkertainen sisältäen seuraavat vaiheet:

Valmistele data

Ohjatun (supervised) oppimisen malleissa datasta täytyy erottaa selittävät muuttujat (feature-matriisi , x-muuttujat) ja selitettävä muuttuja (label, target, y-muuttuja).

Ohjaamattomissa (unsupervised) malleissa tarvitaan ainoastaan feature-matriisi.

Tuo malli ja säädä lähtötiedot

Esimerkiksi tässä artikkelissa käytettävä lineaarinen regressiomalli tuodaan seuraavasti:

from sklearn.linear_model import LinearRegression

Lineaaristen mallien kirjastosta siis tuodaan LinearRegression-malli. Mallin lähtötietojen säätäminen edellyttää käytettävän mallin tuntemusta. Jos et ole perehtynyt malliin, niin voit tyytyä lähtötietojen oletusarvoihin.

Sovita malli (fit)

Tässä vaiheessa suoritetaan varsinainen laskenta. Onneksi valmiit algoritmit hoitavat laskennan.

Arvioi mallin sopivuutta

Sopivuuden arviointiin on monia menetelmiä, esimerkiksi selityskertoimen laskeminen, visuaalinen tarkastelu tai mallin toimivuuden testaaminen testidatalla.

Ennusta (predict)

Ennakoivassa analytiikassa keskeisin vaihe on tietysti ennusteiden laskeminen uudelle datalle.

Lineaarinen regressio

Lineaarisella regressiomallilla voidaan ennustaa jatkuvaluonteisen muuttujan arvoja selittävien muuttujien avulla, jos selittävien muuttujien ja ennustettavan muuttujan välillä on likimain lineaarinen (suoraviivainen) riippuvuus.

Lineaarista regressiomallia voidaan pitää koneoppimisen mallina, jos kone määrittää (oppii) mallin parametrit olemassa olevan datan (training data) perusteella.

Ohjelmakirjastojen tuonti

Kuvailevasta analyysistä tutut peruskirjastot ovat tarpeen:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Datan valmistelu

Tässä esimerkissä luen datan Excel-tiedostosta dataframeen:

df = pd.read_excel('linreg1.xlsx')
df

linreg1

Yritän selittää myyntiä mainoskuluilla, joten määritän mainoskulut selittäväksi muuttujaksi (x) ja myynnin selitettäväksi muuttujaksi (y). Feature-matriisin täytyy olla mallia sovitettaessa dataframe-muodossa, joten teen muunnoksen to_frame-funktiolla.

x=df['Mainoskulut 1000 €']
X=df['Mainoskulut 1000 €'].to_frame() #feature-matriisi
y=df['Myynti 1000 €'] #target
plt.scatter(x,y)

linreg2

Pistekaavion perusteella riippuvuus mainoskulujen ja myynnin välillä näyttää likimain lineaariselta (suoraviivaiselta).

Mallin sovitus

Tuon LinearRegression-mallin lineaaristen mallien kirjastosta ja nimeän sen yksinkertaisuuden vuoksi nimellä malli.

from sklearn.linear_model import LinearRegression
malli=LinearRegression()
malli.fit(X,y)

Tulosteena saan mallin lähtötiedot (joita olisin voinut halutessani säätää):

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

Mallin sovittamisen jälkeen voin katsoa mallin parametreja. Yksinkertaisen lineaarisen regression tapauksessa mallin parametrit ovat suoran kulmakerroin ja vakiotermi.

malli.coef_ #kulmakerroin

array([52.56756757])

Kulmakerroin tulee listamuodossa (array), koska mallissa voisi olla useampia selittäviä muuttujia ja näin ollen myös useampia kulmakertoimia.

malli.intercept_ #vakiotermi

46.486486486486505

Mallina on siis suora, jonka yhtälö: y = 52,568x + 46,486

Mallin sopivuuden arviointi

Mallin selityskertoimen saan:

malli.score(X,y)

0.7663982928521625

Voin siis todeta: 76,6 % myynnin varianssista voidaan selittää mainoskuluilla.

Voin tarkastella mallin sopivuutta myös graafisesti:

xfit=np.linspace(0.4,1.4) #50 arvoa tasavälein väliltä 0.4 - 1.4
Xfit=pd.DataFrame(xfit)
yfit=malli.predict(Xfit)
plt.scatter(x,y)
plt.plot(xfit,yfit)
plt.xlabel('Mainoskulut 1000 €')
plt.ylabel('Myynti 1000 €')

linreg3

Ennustaminen

Jos mainoskuluihin suunnitellaan käytettäväksi 700, 800 tai 900 euroa, niin mallin mukaiset myyntiennusteet:

malli.predict([0.7, 0.8, 0.9])

array([83.28378378, 88.54054054, 93.7972973 ])

Yhteenveto

Yksinkertaisimmillaan tuodaan ja määritellään malli, sovitetaan malli ja ennustetaan:

from sklearn.linear_model import LinearRegression 

malli=LinearRegression() 

malli.fit(X,y)

malli.predict([0.7, 0.8, 0.9])

 

Lineaarinen yhden selittäjän regressiomalli

Päivitetty 28.9.2020

Kahden määrällisen muuttujan riippuvuutta voin tarkastella hajontakaavion avulla. Lisäksi voin laskea lineaarisen (suoraviivaisen) riippuvuuden voimakkuutta mittaavan korrelaatiokertoimen. Lisätietoja artikkelissani Korrelaatio ja sen merkitsevyys.

Jos haluan selvittää tarkemmin riippuvuuden luonnetta tai hyödyntää riippuvuutta ennustamistarkoituksiin, niin voin mallintaa riippuvuutta lineaarisen mallin avulla.

Suoran yhtälö

Riippuvuudesta voin rakentaa matemaattisen mallin. Kahden muuttujan riippuvuutta kuvaava matemaattinen malli on lauseke, jonka avulla voin laskea toisen muuttujan arvoja ensimmäisen muuttujan arvojen perusteella. Jos muuttujien välinen riippuvuus on suoraviivainen eli lineaarinen, niin käytän mallina suoraa. Lineaarisesta mallista käytetään yleisesti nimeä lineaarinen regressiomalli ja mallina käytettävää suoraa kutsutaan regressiosuoraksi.

Suoraa voin kuvata lausekkeella y = bx + c. Lauseke kertoo miten saan laskettua y:n, kun tunnen x:n.

  • Termiä c kutsutaan vakiotermiksi. Vakiotermi kertoo, missä kohdassa suora leikkaa y-akselia (tämän näen asettamalla x:lle arvon 0, jolloin lausekkeesta jää jäljelle y=c).
  • Termiä b kutsutaan kulmakertoimeksi. Kulmakerroin ilmoittaa minkä verran y muuttuu, kun x kasvaa yhdellä yksiköllä. Laskevaan suoraan liittyy negatiivinen kulmakerroin ja nousevaan suoraan positiivinen kulmakerroin.

Esimerkki. Oletetaan, että konsultti perii palkkiota paikalle saapumisesta 100 euroa ja jokaiselta tehdyltä työtunnilta 80 euroa. Tällöin voin mallintaa konsultin kokonaispalkkiota lausekkeella y=80x+100, missä x on työtuntien määrä. Kyseisessä suoran yhtälössä

  • vakioterminä on 100 ja se ilmoittaa y:n arvon, kun x=0 (eli esimerkissämme palkkio ilman varsinaisia työtunteja)
  • kulmakerroin 80 ilmoittaa palkkion muutoksen, kun työtunnit lisääntyvät yhdellä.

Mallin lisääminen Excelin hajontakaavioon

Voin lisätä Excelin hajontakaavioon riippuvuutta kuvaavan mallin kuvaajan, lausekkeen ja selityskertoimen:

  1. Valitsen Design-välilehdeltä Add Chart Element – Trendline – More Trendline Options (Lisää kaavion osa – Suuntaviiva – Lisää suuntaviivavaihtoehtoja).
  2. Valitsen malliksi Linear (Lineaarinen).
  3. Valitsen tulostettavaksi mallin kaavan Display Equation on Chart (Näytä kaava kaaviossa).
  4. Valitsen tulostettavaksi mallin selityskertoimen kohdasta Display R-squared Value on Chart (Näytä korrelaatiokertoimen arvo kaaviossa). Huomaa, että Excelin suomenkielisissä versioissa puhutaan virheellisesti korrelaatiokertoimesta vaikka kyseessä on korrelaatiokertoimen neliö eli selityskerroin.

Yllä olevaan kuvioon olen lisännyt mainoskulujen ja myynnin välisen mallin. Löydät esimerkin Excel-tiedostosta regressio1.xlsx. Voin tulkita mallia seuraavasti:

  • Kulmakertoimesta 52,568 voin päätellä, että tuhat euroa mainoskuluissa merkitsee keskimäärin 52568 euroa myynnissä.
  • Vakiotermi 46,486 taas ilmoittaa myynnin olevan 46486 euroa, jos mainoskuluja ei ole lainkaan. Tässä tapauksessa vakiotermin antama tieto ei ole käyttökelpoinen eikä luotettava, koska mainoskulujen arvo 0 sijaitsee selvästi havaintoalueen ulkopuolella. Yleensäkään mallin käyttöaluetta ei voi laajentaa kovin paljon havaintoalueen ulkopuolelle.

Mallin avulla voin laskea esimerkiksi seuraavat ennusteet:

  • Jos mainontaan aiotaan käyttää 900 euroa, niin mallin mukainen myyntiennuste on 52,568*0,9+46,486≈93,8 eli 93 800 euroa.
  • Jos tavoitteena on 90 000 euron myynti, niin mallin mukaan mainontaan pitäisi käyttää (90-46,486)/52,568≈0,83 eli 830 euroa.

Käytännössä ennusteet kannattaa laskea Excelin FORECAST (ENNUSTE) -funktiolla, jolloin vältät kulmakertoimeen ja vakiotermiin liittyvät pyöristysvirheet. Katso tarkemmat tiedot Excel-tiedostosta regressio1.xlsx.

Selityskerroin

Äskeisessä esimerkissä selityskerroin on 0,7664 eli 76,64%. Tämä tulkitsen seuraavasti: 76,64% myynnin vaihtelusta voidaan selittää mainoskulujen vaihtelulla. Mallin tarkoituksena on selittää y:n arvojen vaihtelua x:n arvojen vaihtelulla. Selityskertoimella mitataan kuinka hyvin tässä onnistutaan.

Tarkastelen seuraavaksi, mihin selityskertoimen laskenta perustuu. Kunkin havainnon y-arvon kokonaispoikkeama y-arvojen keskiarvosta koostuu kahdesta osasta: mallin selittämästä poikkeamasta ja poikkeamasta, jota malli ei selitä. Seuraavassa kuviossa havaintopisteen kokonaispoikkeama on jaettu mallin selittämään poikkeamaan ja selittämättä jäävään poikkeamaan.

Jos merkitsen mallin selittämien poikkeamien neliöiden summaa SSR (sum of squares due to regression) ja selittämättömien poikkeamien neliöiden summaa SSE (sum of squares due to error), niin kokonaispoikkeamien neliöiden summa SST (total sum of squares) jakaantuu kahteen komponenttiin

SST = SSR + SSE

Selityskerroin on mallin selittämän vaihtelun osuus kokonaisvaihtelusta eli SSR/SST

Lineaarisessa mallissa voin laskea selityskertoimen  myös korrelaatiokertoimen neliönä. Regressiosuoran laskentamenetelmä liittyy sekin neliösummiin. Suora lasketaan pienimmän neliösumman menetelmää käyttäen. Kaikkien mahdollisten pistejoukon läpi kulkevien suorien joukosta valitaan se, jonka kohdalla neliösumma SSE (vaihtelu, jota malli ei selitä) saa pienimmän mahdollisen arvon.

Excelin funktioita

=FORECAST(x;tunnetut y;tunnetut x) -funktiolla (ENNUSTE) voin kätevästi laskea lineaariseen malliin liittyviä ennusteita. Funktio laskee x-arvoon liittyvän y-arvon regressiosuoran yhtälöä käyttäen (taustalla Excel laskee tunnettujen y:n arvojen ja tunnettujen x-arvojen perusteella regressiosuoran yhtälön).

=INTERCEPT(tunnetut y;tunnetut x) -funktiolla (LEIKKAUSPISTE) voin laskea regressiosuoran vakiotermin.

=SLOPE(tunnetut y;tunnetut x) -funktiolla (KULMAKERROIN) voin laskea regressiosuoran kulmakertoimen.

Mallin käyttäminen ennustamiseen

Mallin sopivuus

Mallin avulla voidaan ennustaa y, kun x tunnetaan tai x, kun y tunnetaan. Mallin soveltuvuus ennustamiseen riippuu selittämättömän vaihtelun osuudesta. Hajontakaaviosta voin arvioida selittämättömän, epäsäännöllisen vaihtelun suuruutta ja yli päätään mallin sopivuutta havaintoaineistoon. Mitä enemmän havainnot ”pomppivat” mallin molemmin puolin sitä enemmän ennusteeseen sisältyy epävarmuutta.

Poikkeavat havainnot

Mallit ovat herkkiä poikkeaville arvoille. Jos kuviosta erottuu selvästi muista poikkeavia havaintoja, niin niihin ei pidä suhtautua huolettomasti. Lue lisää artikkelistani Poikkeavat arvot.

Mallin käyttöalue

Havaintoja on käytettävissä vain tietyiltä muuttujan arvoilta ja mallin pätevyyttä voidaan arvioida vain havaintoalueella. Havaintoalueen ulkopuolella olevien muuttujan arvojen kohdalla en voi tietää, onko malli pätevä. Tämän vuoksi mallia ei ole perusteltua käyttää havaintoalueen ulkopuolella.

Seuraavaksi

Jos olet kiinnostunut malleista, joissa on useampia selittäviä muuttujia, niin kannattaa tutustua monisteeseeni Lineaariset regressiomallit.