#!/usr/bin/env python # coding: utf-8 # In[1]: from datetime import datetime print(f'Päivitetty {datetime.now().date()} / Aki Taanila') # # Lineaarinen regressio - yksi selittävä muuttuja # # Lineaarisessa regressiossa sovitetaan suora viiva kuvaamaan selittävän muuttujan ja ennustettavan muuttujan välistä yhteyttä. Yleensä käytetään suoran sovitukseen pienimmän neliösumman menetelmää, joka minimoi ennustevirheiden neliöiden summan. # In[2]: import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_style('whitegrid') # Tuon lineaarisen regressiomallin from sklearn.linear_model import LinearRegression # ## Datan tarkastelua # # Tavoitteena ennustaa myynti mainoskulujen perusteella. # In[3]: df = pd.read_excel('http://taanila.fi/linreg1.xlsx') df # In[4]: # Riippuvuuden tarkastelua seaborn-kirjaston jointoplot-kaavion avulla sns.jointplot(data=df, x='Mainoskulut 1000 €', y='Myynti 1000 €', kind='reg') # ## Mallin sovitus # In[5]: # Selittävä muuttuja # Jos selittäviä muuttujia on vain yksi, niin tarvitaan dataframeksi muuntaminen (to_frame) X = df['Mainoskulut 1000 €'].to_frame() # Ennustettava muuttuja y = df['Myynti 1000 €'] # In[6]: malli = LinearRegression().fit(X,y) # ## Mallin tarkastelua # In[7]: malli.coef_ # regressiosuoran kulmakerroin # Mallin mukaan yhden yksikön (1000 €) kasvu mainoskuluissa lisää myyntiä noin 52,6 yksiköllä (1000 €). # In[8]: malli.intercept_ # regressiosuoran vakiotermi # Jos mainoskuluja ei ole lainkaan, niin mallin mukainen myynti on noin 46,5 yksikköä (1000 €). Tähän tietoon täytyy suhtautua varoen, koska havainnoissa ei ole mukana nollan lähellä olevia mainoskuluja. Näin ollen ei voida tietää päteekö suoraviivainen riippuvuus mainoskulujen 0 lähellä. # In[9]: malli.score(X,y) # selityskerroin # Myynnin vaihtelusta noin 76,6 % voidaan selittää mainoskulujen vaihtelulla. # ## Mallin käyttö ennustamiseen # In[10]: # Myyntiennusteet, jos mainoskulut tuhansina euroina ovat 0.7, 0.8 tai 0.9 df_new = pd.DataFrame([0.7, 0.8, 0.9], columns = ['Mainoskulut 1000 €']) df_new['Myyntiennuste 1000 €'] = malli.predict(df_new) df_new #

Lisätietoa

# # Data-analytiikka Pythonilla: https://tilastoapu.wordpress.com/python/