{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Prognoosimine.ipynb","provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyNEFqUurjiIF4DNhLf+1ASR"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"tNYjrdWTExHd"},"source":["# Seame eesmärgi ja tulemusmõõdiku\n","Iga tehisintellekti esimene samm peaks olema eesmärgi seadmine.\n","\n","Meie eesmärgiks on luua **mudel, mis prognoosib ettevõtte müügitulu töötajate arvu ja tegevusala põhjal**.\n","\n","Tulemusmõõdikuna kasutame keskmist absoluutviga ehk mitu eurot meie mudel keskmiselt prognoosi tegemisel eksib. "]},{"cell_type":"markdown","metadata":{"id":"6JKdQQWvVpP6"},"source":["# Impordime tööriistad\n","Prognoosimiseks kasutame Scikit learn teeki, mis sisaldab suurt hulka erinevaid masinõppe algoritme ja tööriistu andmete haldamiseks.\n","https://scikit-learn.org/stable/ "]},{"cell_type":"code","metadata":{"id":"aEofWhfoXRn9"},"source":["# Impordime vajalikud teegid\n","import pandas as pd\n","import sklearn as sk"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"-zbrup7lh38h"},"source":["# Andmete importimine\n","Impordime allolevas näites .csv faili Avaandmete portaalist saadud andmetega ettevõtete müügitulu ja tasutud maksude kohta. Andmed on eelnevalt salvestatud Github'i."]},{"cell_type":"code","metadata":{"id":"Jk9MfsgBh13q","colab":{"base_uri":"https://localhost:8080/","height":825},"executionInfo":{"status":"ok","timestamp":1639408147748,"user_tz":-120,"elapsed":1229,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"0b7c965a-ef66-487c-ab10-8035ee653b17"},"source":["raw_data_url = 'https://raw.githubusercontent.com/kristjan-eljand/andmeteadus_on_popp/main/maksud_2021_iii_kvartal.csv'\n","raw_data = pd.read_csv(raw_data_url)\n","raw_data"],"execution_count":3,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
reg_code
\n","
name
\n","
type
\n","
vat_registry
\n","
emtak
\n","
county
\n","
national_tax
\n","
employee_tax
\n","
revenue
\n","
employees
\n","
\n"," \n"," \n","
\n","
0
\n","
10000018
\n","
AMSERV AUTO AKTSIASELTS
\n","
Äriühing
\n","
jah
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
Harju ( Tallinn )
\n","
1375329.0
\n","
801558.0
\n","
21587224.0
\n","
191.0
\n","
\n","
\n","
1
\n","
10000024
\n","
EESTI RAAMAT, OÜ
\n","
Äriühing
\n","
jah
\n","
INFO JA SIDE
\n","
Harju ( Tallinn )
\n","
26769.0
\n","
21439.0
\n","
144389.0
\n","
12.0
\n","
\n","
\n","
2
\n","
10000062
\n","
ALDO KOPPEL
\n","
FIE
\n","
jah
\n","
PÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜK
\n","
Ida-Viru ( Lüganuse vald )
\n","
3982.0
\n","
0.0
\n","
27514.0
\n","
NaN
\n","
\n","
\n","
3
\n","
10000127
\n","
ARAVETE APTEEK, TÜ
\n","
Äriühing
\n","
jah
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
Järva ( Järva vald )
\n","
7138.0
\n","
5784.0
\n","
158317.0
\n","
2.0
\n","
\n","
\n","
4
\n","
10000165
\n","
KIVIÕLI KAUBAHOOV, AS
\n","
Äriühing
\n","
jah
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
Ida-Viru ( Lüganuse vald )
\n","
216776.0
\n","
94754.0
\n","
1582858.0
\n","
39.0
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
147252
\n","
BB000770
\n","
AMAZON EU SARL
\n","
Mitteresident
\n","
jah
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
NaN
\n","
235295.0
\n","
0.0
\n","
1230805.0
\n","
NaN
\n","
\n","
\n","
147253
\n","
KK106568
\n","
SEGERS FABRIKER AB
\n","
Mitteresident
\n","
jah
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
0.0
\n","
0.0
\n","
1251075.0
\n","
NaN
\n","
\n","
\n","
147254
\n","
MM000001
\n","
KONSULTTITOIMISTO SEPPO HOFFREN OY CONSULTANCY
\n","
Mitteresident
\n","
ei
\n","
NaN
\n","
NaN
\n","
2614.0
\n","
2834.0
\n","
NaN
\n","
1.0
\n","
\n","
\n","
147255
\n","
MM000047
\n","
WHITE BEACH GOLF OY
\n","
Mitteresident
\n","
ei
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
1.0
\n","
\n","
\n","
147256
\n","
QQ000003
\n","
RAUMASTER OY
\n","
Mitteresident
\n","
jah
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
NaN
\n","
15695.0
\n","
16580.0
\n","
64996.0
\n","
3.0
\n","
\n"," \n","
\n","
147257 rows × 10 columns
\n","
"],"text/plain":[" reg_code ... employees\n","0 10000018 ... 191.0\n","1 10000024 ... 12.0\n","2 10000062 ... NaN\n","3 10000127 ... 2.0\n","4 10000165 ... 39.0\n","... ... ... ...\n","147252 BB000770 ... NaN\n","147253 KK106568 ... NaN\n","147254 MM000001 ... 1.0\n","147255 MM000047 ... 1.0\n","147256 QQ000003 ... 3.0\n","\n","[147257 rows x 10 columns]"]},"metadata":{},"execution_count":3}]},{"cell_type":"markdown","metadata":{"id":"4W5PaZgeIOXe"},"source":["# Andmete eeltöötlus\n","## Valime vajalikud muutujad\n","Antud näites on meil vaja alles jätta kolm muutujat: tegevusala, müügitulu ja töötajate arv."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"u9ccimjSIlGj","executionInfo":{"status":"ok","timestamp":1639408168874,"user_tz":-120,"elapsed":283,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"4b097ab3-49d5-431f-da17-d2a93fc139f0"},"source":["selected_data = raw_data[['emtak', 'employees', 'revenue']]\n","selected_data"],"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
emtak
\n","
employees
\n","
revenue
\n","
\n"," \n"," \n","
\n","
0
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
191.0
\n","
21587224.0
\n","
\n","
\n","
1
\n","
INFO JA SIDE
\n","
12.0
\n","
144389.0
\n","
\n","
\n","
2
\n","
PÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜK
\n","
NaN
\n","
27514.0
\n","
\n","
\n","
3
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
2.0
\n","
158317.0
\n","
\n","
\n","
4
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
39.0
\n","
1582858.0
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
147252
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
NaN
\n","
1230805.0
\n","
\n","
\n","
147253
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
1251075.0
\n","
\n","
\n","
147254
\n","
NaN
\n","
1.0
\n","
NaN
\n","
\n","
\n","
147255
\n","
NaN
\n","
1.0
\n","
NaN
\n","
\n","
\n","
147256
\n","
HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...
\n","
3.0
\n","
64996.0
\n","
\n"," \n","
\n","
147257 rows × 3 columns
\n","
"],"text/plain":[" emtak ... revenue\n","0 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 21587224.0\n","1 INFO JA SIDE ... 144389.0\n","2 PÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜK ... 27514.0\n","3 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 158317.0\n","4 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 1582858.0\n","... ... ... ...\n","147252 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 1230805.0\n","147253 TÖÖTLEV TÖÖSTUS ... 1251075.0\n","147254 NaN ... NaN\n","147255 NaN ... NaN\n","147256 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 64996.0\n","\n","[147257 rows x 3 columns]"]},"metadata":{},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"jzT2D3KKI3_r"},"source":["## Jätame lihtsuse huvides alles vaid kolm tegevusala \"INFO JA SIDE\", \"TÖÖTLEV TÖÖSTUS\" ja \"EHITUS\""]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"oCHTUbV4JD9B","executionInfo":{"status":"ok","timestamp":1639408213245,"user_tz":-120,"elapsed":284,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"0f97a816-e83c-474f-877a-ddf7185a9d23"},"source":["emtak_to_keep = ['INFO JA SIDE', 'TÖÖTLEV TÖÖSTUS', 'EHITUS']\n","rows_to_keep = selected_data.emtak.isin(emtak_to_keep)\n","filtered_data = selected_data.loc[rows_to_keep,:]\n","filtered_data"],"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
emtak
\n","
employees
\n","
revenue
\n","
\n"," \n"," \n","
\n","
1
\n","
INFO JA SIDE
\n","
12.0
\n","
144389.0
\n","
\n","
\n","
5
\n","
TÖÖTLEV TÖÖSTUS
\n","
9.0
\n","
33043.0
\n","
\n","
\n","
8
\n","
TÖÖTLEV TÖÖSTUS
\n","
128.0
\n","
5924007.0
\n","
\n","
\n","
9
\n","
TÖÖTLEV TÖÖSTUS
\n","
6.0
\n","
25659.0
\n","
\n","
\n","
10
\n","
EHITUS
\n","
8.0
\n","
141853.0
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
147242
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
31950.0
\n","
\n","
\n","
147244
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
66935.0
\n","
\n","
\n","
147246
\n","
INFO JA SIDE
\n","
2.0
\n","
28218.0
\n","
\n","
\n","
147250
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
0.0
\n","
\n","
\n","
147253
\n","
TÖÖTLEV TÖÖSTUS
\n","
NaN
\n","
1251075.0
\n","
\n"," \n","
\n","
35735 rows × 3 columns
\n","
"],"text/plain":[" emtak employees revenue\n","1 INFO JA SIDE 12.0 144389.0\n","5 TÖÖTLEV TÖÖSTUS 9.0 33043.0\n","8 TÖÖTLEV TÖÖSTUS 128.0 5924007.0\n","9 TÖÖTLEV TÖÖSTUS 6.0 25659.0\n","10 EHITUS 8.0 141853.0\n","... ... ... ...\n","147242 TÖÖTLEV TÖÖSTUS NaN 31950.0\n","147244 TÖÖTLEV TÖÖSTUS NaN 66935.0\n","147246 INFO JA SIDE 2.0 28218.0\n","147250 TÖÖTLEV TÖÖSTUS NaN 0.0\n","147253 TÖÖTLEV TÖÖSTUS NaN 1251075.0\n","\n","[35735 rows x 3 columns]"]},"metadata":{},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"76YkoqYTJqcy"},"source":["## Eemaldame puuduvad andmed\n","Juba ülalolevast tabelist näeme, et meie andmestikus on puuduvaid väärtusi (NaN) väärtusi.\n","Eemaldame need read andmestikust (NB: kui andmeid on vähe, peaks eemaldamise asemel need väärtused millegagi asendama - meil hetkel seda probleemi pole)."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"rNLR8kBGKF8C","executionInfo":{"status":"ok","timestamp":1639408244266,"user_tz":-120,"elapsed":320,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"7ac6c6b2-8eba-45fd-a8cf-8ea23f4dcf2d"},"source":["clean_data = filtered_data.dropna()\n","clean_data"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
emtak
\n","
employees
\n","
revenue
\n","
\n"," \n"," \n","
\n","
1
\n","
INFO JA SIDE
\n","
12.0
\n","
144389.0
\n","
\n","
\n","
5
\n","
TÖÖTLEV TÖÖSTUS
\n","
9.0
\n","
33043.0
\n","
\n","
\n","
8
\n","
TÖÖTLEV TÖÖSTUS
\n","
128.0
\n","
5924007.0
\n","
\n","
\n","
9
\n","
TÖÖTLEV TÖÖSTUS
\n","
6.0
\n","
25659.0
\n","
\n","
\n","
10
\n","
EHITUS
\n","
8.0
\n","
141853.0
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
147076
\n","
INFO JA SIDE
\n","
3.0
\n","
143609.0
\n","
\n","
\n","
147079
\n","
INFO JA SIDE
\n","
6.0
\n","
22225.0
\n","
\n","
\n","
147121
\n","
INFO JA SIDE
\n","
2.0
\n","
0.0
\n","
\n","
\n","
147220
\n","
TÖÖTLEV TÖÖSTUS
\n","
3.0
\n","
4059.0
\n","
\n","
\n","
147246
\n","
INFO JA SIDE
\n","
2.0
\n","
28218.0
\n","
\n"," \n","
\n","
17450 rows × 3 columns
\n","
"],"text/plain":[" emtak employees revenue\n","1 INFO JA SIDE 12.0 144389.0\n","5 TÖÖTLEV TÖÖSTUS 9.0 33043.0\n","8 TÖÖTLEV TÖÖSTUS 128.0 5924007.0\n","9 TÖÖTLEV TÖÖSTUS 6.0 25659.0\n","10 EHITUS 8.0 141853.0\n","... ... ... ...\n","147076 INFO JA SIDE 3.0 143609.0\n","147079 INFO JA SIDE 6.0 22225.0\n","147121 INFO JA SIDE 2.0 0.0\n","147220 TÖÖTLEV TÖÖSTUS 3.0 4059.0\n","147246 INFO JA SIDE 2.0 28218.0\n","\n","[17450 rows x 3 columns]"]},"metadata":{},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"n5Wp_k3dLSb-"},"source":["## Vaatame andmed üle"]},{"cell_type":"markdown","metadata":{"id":"KP8ZGyaELZhP"},"source":["### Uurime andmete üldist jaotust"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":394},"id":"iWp4HGBPKvZl","executionInfo":{"status":"ok","timestamp":1639408270530,"user_tz":-120,"elapsed":286,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"d8b6f822-471a-457e-d909-72b0ae1d79b5"},"source":["clean_data.describe(include='all')"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
emtak
\n","
employees
\n","
revenue
\n","
\n"," \n"," \n","
\n","
count
\n","
17450
\n","
17450.000000
\n","
1.745000e+04
\n","
\n","
\n","
unique
\n","
3
\n","
NaN
\n","
NaN
\n","
\n","
\n","
top
\n","
EHITUS
\n","
NaN
\n","
NaN
\n","
\n","
\n","
freq
\n","
9012
\n","
NaN
\n","
NaN
\n","
\n","
\n","
mean
\n","
NaN
\n","
10.262521
\n","
4.121827e+05
\n","
\n","
\n","
std
\n","
NaN
\n","
40.649160
\n","
2.764708e+06
\n","
\n","
\n","
min
\n","
NaN
\n","
1.000000
\n","
-1.331100e+04
\n","
\n","
\n","
25%
\n","
NaN
\n","
1.000000
\n","
1.120875e+04
\n","
\n","
\n","
50%
\n","
NaN
\n","
3.000000
\n","
3.466550e+04
\n","
\n","
\n","
75%
\n","
NaN
\n","
7.000000
\n","
1.281268e+05
\n","
\n","
\n","
max
\n","
NaN
\n","
1809.000000
\n","
2.020712e+08
\n","
\n"," \n","
\n","
"],"text/plain":[" emtak employees revenue\n","count 17450 17450.000000 1.745000e+04\n","unique 3 NaN NaN\n","top EHITUS NaN NaN\n","freq 9012 NaN NaN\n","mean NaN 10.262521 4.121827e+05\n","std NaN 40.649160 2.764708e+06\n","min NaN 1.000000 -1.331100e+04\n","25% NaN 1.000000 1.120875e+04\n","50% NaN 3.000000 3.466550e+04\n","75% NaN 7.000000 1.281268e+05\n","max NaN 1809.000000 2.020712e+08"]},"metadata":{},"execution_count":7}]},{"cell_type":"markdown","metadata":{"id":"oAORx6UkLc27"},"source":["### Vaatame jaotust tegevusalade järgi"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rt3uSVquLgaE","executionInfo":{"status":"ok","timestamp":1639408290843,"user_tz":-120,"elapsed":298,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"33076c21-d041-400a-9a07-bf30ffc69e3f"},"source":["clean_data.emtak.value_counts()"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["EHITUS 9012\n","TÖÖTLEV TÖÖSTUS 5566\n","INFO JA SIDE 2872\n","Name: emtak, dtype: int64"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","metadata":{"id":"ObbIoocPMZ2v"},"source":["### Vaatame töötajate arvu ja müügitulu korrelatsiooni"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":112},"id":"fsy_yMoSNEfm","executionInfo":{"status":"ok","timestamp":1639408328348,"user_tz":-120,"elapsed":279,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"9b0ee746-9925-42ef-8e20-0a3cc37ab501"},"source":["clean_data.corr()"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
employees
\n","
revenue
\n","
\n"," \n"," \n","
\n","
employees
\n","
1.000000
\n","
0.793414
\n","
\n","
\n","
revenue
\n","
0.793414
\n","
1.000000
\n","
\n"," \n","
\n","
"],"text/plain":[" employees revenue\n","employees 1.000000 0.793414\n","revenue 0.793414 1.000000"]},"metadata":{},"execution_count":9}]},{"cell_type":"markdown","metadata":{"id":"HR21FF8gL85W"},"source":["# Andmete ettevalmistamine masinõppeks"]},{"cell_type":"markdown","metadata":{"id":"u672gTPMNc0X"},"source":["## Muudame kõik muutujad numbrilisteks\n","Sageli soovime mudelites kasutada muutujaid, mis ei ole numbrilised (N: tegevusala). Masinõppemudelid seevastu tahavad, et kõik muutujad oleksid numbrilised.\n","\n","Lahendus on luua andmestikku uued binaarsed (0 või 1) muutujad -> üks muutuja iga mittenumbrilise muutuja väärtuse kohta (vt. alljärgnev näide, et paremini mõista).\n","\n","Lahendada saab seda mitmel eri viisil, kuid kuna meie kasutame oma näites Pandas andmetabelit, siis saame need 0/1 muutujad luua üherealise käsuga `pd.get_dummies`."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"S80UC6eUQPRE","executionInfo":{"status":"ok","timestamp":1639408415004,"user_tz":-120,"elapsed":342,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"a812e8b2-6757-4563-8751-fde2fbf6af51"},"source":["# Muudame tekstilise veeru 'emtak' numbrilisteks veergudeks.\n","numeric_data = pd.get_dummies(data=clean_data, columns=['emtak'])\n","numeric_data"],"execution_count":10,"outputs":[{"output_type":"execute_result","data":{"text/html":["
"],"text/plain":[" employees ... emtak_TÖÖTLEV TÖÖSTUS\n","employees 1.00 ... 0.14\n","revenue 0.79 ... 0.11\n","emtak_EHITUS -0.13 ... -0.71\n","emtak_INFO JA SIDE -0.01 ... -0.30\n","emtak_TÖÖTLEV TÖÖSTUS 0.14 ... 1.00\n","\n","[5 rows x 5 columns]"]},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","metadata":{"id":"f-APegEfSHRE"},"source":["### Visualiseerime korrelatsioonimaatriksi"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":540},"id":"YGhsJcp1SKTy","executionInfo":{"status":"ok","timestamp":1639408502583,"user_tz":-120,"elapsed":1029,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"1d31c965-fbb0-423b-a42e-ae7b83c7d41a"},"source":["import seaborn as sn\n","import matplotlib.pyplot as plt\n","\n","plt.figure(dpi=100)\n","sn.heatmap(correlation_matrix, annot=True)\n","plt.show()"],"execution_count":12,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Eh3Pt-TEVEpk"},"source":["## Jaotame andmed treening- ja testandmeteks\n","Treening- ja testandmeid on võimalik moodustada väga erinval moel. Sisuliselt tahame me jaotada oma andmestiku kaheks: 80% jätame treenimiseks ja 20% jätame testimiseks.\n","\n","Allolevas näites kasutame selle tegemiseks sklearn teegi funktsiooni `train_test_split`, mis loob meile 4 andmestiku ühe käiguga."]},{"cell_type":"code","metadata":{"id":"2PwJgT90VJy2","executionInfo":{"status":"ok","timestamp":1639408644857,"user_tz":-120,"elapsed":424,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["from sklearn.model_selection import train_test_split\n","\n","# Teeme koopia oma andmestikust\n","ml_data = numeric_data.copy()\n","\n","# eemaldame müügitulu 'var' ehk prognoositava muutuja prognoosis kasutavatest muutujatest 'vars'\n","result = ml_data.pop('revenue')\n","variables = ml_data\n","\n","# Loome treening ja testandmestikud\n","train_variables, test_variables, train_result, test_result = train_test_split(variables, result, test_size=0.2, random_state=123)"],"execution_count":13,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"GBfOgbVae9o4"},"source":["## Standardiseerime andmed\n","Hetkel on meie andmestikus nii, et andmete \"skaalad\" on erinevad. Paljud masinõppealgoritmid tahavad aga, et skaalad oleksid sarnased (N: et kõik muutujad oleks 0 ja 1 vahel)."]},{"cell_type":"code","metadata":{"id":"OtnaT7l4KLus","executionInfo":{"status":"ok","timestamp":1639408701352,"user_tz":-120,"elapsed":297,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["from sklearn.preprocessing import MinMaxScaler\n","# Loome ka skaleeritud muutujad\n","train_variables_minmax = MinMaxScaler().fit_transform(train_variables)\n","test_variables_minmax = MinMaxScaler().fit_transform(test_variables)"],"execution_count":14,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"KTPtFRmEUc5x"},"source":["# Prognoosimine"]},{"cell_type":"markdown","metadata":{"id":"dqsM5l_N3m1y"},"source":["## Prognoosimine lineaarse mudeliga\n","Lineaarne regressioonmudel on kõige lihtsam võimalik mudel ja annab meile lõpptulemuse kujul y = nx + my + ..., kus y on väärtus, mida ennustame (antud juhul müügitulu), x, y on muutujad (meie mudeli töötajate arv ja tegevusala) ning m,n on muutujate parameetrid.\n","\n","sklearn teegi hea omadus on, et valikus on küll palju erinevaid mudeleid, kuid nende treenimine käib alati *peaaegu* samamoodi: \n","1. impordime mudeli,\n","2. kasutame `fit(train_variables, train_result)` meetodit treenimiseks,\n","3. kasutame `predict(test_variables)` meetodit prognoosimiseks."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"x4Bab_2vgsSs","executionInfo":{"status":"ok","timestamp":1639408803158,"user_tz":-120,"elapsed":275,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"9d58c997-285f-4145-e556-e82e455c3e24"},"source":["# Impordime lineaarse regressiooni mudeli\n","from sklearn.linear_model import LinearRegression\n","\n","# Treenime mudeli, kasutades treenimise ettenähtud andmeid\n","model = LinearRegression()\n","model.fit(X=train_variables, y=train_result)\n","\n","# Teeme prognoosi testandmete peal\n","linear_prediction = model.predict(X=test_variables)\n","linear_prediction"],"execution_count":15,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ -25931.88302618, 15150399.35135626, -101267.14605191, ...,\n"," 411571.11630774, 73302.92730663, 266599.03530726])"]},"metadata":{},"execution_count":15}]},{"cell_type":"markdown","metadata":{"id":"lG8TYHBM87Ni"},"source":["### Meie mudel on lihtsalt üks matemaatiline valem\n","Kasutame mudeli meetodit `coef_` et printida välja muutujate parameetrite väärtused."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"YXOBJ_TU9Lzl","executionInfo":{"status":"ok","timestamp":1639408827738,"user_tz":-120,"elapsed":285,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"5efb2d71-3d54-4308-c4e9-b94242aef6ea"},"source":["# Muutujate parameetrid\n","print(\"Muutujate parameetrid:\", [int(x) for x in model.coef_])\n","\n","# Vabaliige, mis ütleb, milline on müügitulu eeldatav väärtus, \n","# kui muutujate väärtused on nullid\n","print(\"Vabaliige:\", int(model.intercept_))"],"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["Muutujate parameetrid: [48324, 24249, -51085, 26836]\n","Vabaliige: -98505\n"]}]},{"cell_type":"markdown","metadata":{"id":"hX7hmg8Z5rW4"},"source":["### Lisame prognoositud väärtused tegelikele väärtustele"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":476},"id":"jbqdSS1_5yze","executionInfo":{"status":"ok","timestamp":1639408882760,"user_tz":-120,"elapsed":318,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"188b1c2c-0222-4813-eda2-34d3aa6949d6"},"source":["def make_evaluation_table(predictions):\n"," # Paneme ennustused Pandas formaati\n"," prediction_series = pd.Series(data=predictions, index=test_result.index, name=\"prediction\")\n","\n"," # Lisame prognoosiveeru\n"," evaluate_results = pd.concat([test_variables, test_result, prediction_series], axis=1)\n","\n"," # Lisame nimeveeru algsest andmestikust\n"," evaluate_results = pd.merge(raw_data['name'], evaluate_results, left_index=True, right_index=True)\n"," return evaluate_results\n","\n","linear_eval_table = make_evaluation_table(linear_prediction)\n","linear_eval_table"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
name
\n","
employees
\n","
emtak_EHITUS
\n","
emtak_INFO JA SIDE
\n","
emtak_TÖÖTLEV TÖÖSTUS
\n","
revenue
\n","
prediction
\n","
\n"," \n"," \n","
\n","
36
\n","
ESTIKO-PLASTAR, AS
\n","
167.0
\n","
0
\n","
0
\n","
1
\n","
15609277.0
\n","
7.998443e+06
\n","
\n","
\n","
45
\n","
CE TEHNIKA OÜ
\n","
2.0
\n","
0
\n","
0
\n","
1
\n","
8647.0
\n","
2.497890e+04
\n","
\n","
\n","
86
\n","
SAVEKATE, OÜ
\n","
50.0
\n","
1
\n","
0
\n","
0
\n","
3189996.0
\n","
2.341945e+06
\n","
\n","
\n","
91
\n","
SKILINE, OÜ
\n","
1.0
\n","
1
\n","
0
\n","
0
\n","
5200.0
\n","
-2.593188e+04
\n","
\n","
\n","
102
\n","
ANNINET-V, OÜ
\n","
7.0
\n","
0
\n","
0
\n","
1
\n","
51856.0
\n","
2.665990e+05
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
144394
\n","
MITTETULUNDUSÜHING HIIUMAA KINO
\n","
1.0
\n","
0
\n","
1
\n","
0
\n","
8550.0
\n","
-1.012671e+05
\n","
\n","
\n","
145438
\n","
MTÜ NORDIC INSTITUTE FOR INTEROPERABILITY SOLU...
\n","
4.0
\n","
0
\n","
1
\n","
0
\n","
286342.0
\n","
4.370493e+04
\n","
\n","
\n","
146740
\n","
IURIDICUM, SIHTASUTUS
\n","
6.0
\n","
0
\n","
1
\n","
0
\n","
31961.0
\n","
1.403530e+05
\n","
\n","
\n","
146826
\n","
KULTUURILEHT, SIHTASUTUS
\n","
104.0
\n","
0
\n","
1
\n","
0
\n","
114214.0
\n","
4.876108e+06
\n","
\n","
\n","
147079
\n","
EMAKEELE SIHTASUTUS
\n","
6.0
\n","
0
\n","
1
\n","
0
\n","
22225.0
\n","
1.403530e+05
\n","
\n"," \n","
\n","
3490 rows × 7 columns
\n","
"],"text/plain":[" name ... prediction\n","36 ESTIKO-PLASTAR, AS ... 7.998443e+06\n","45 CE TEHNIKA OÜ ... 2.497890e+04\n","86 SAVEKATE, OÜ ... 2.341945e+06\n","91 SKILINE, OÜ ... -2.593188e+04\n","102 ANNINET-V, OÜ ... 2.665990e+05\n","... ... ... ...\n","144394 MITTETULUNDUSÜHING HIIUMAA KINO ... -1.012671e+05\n","145438 MTÜ NORDIC INSTITUTE FOR INTEROPERABILITY SOLU... ... 4.370493e+04\n","146740 IURIDICUM, SIHTASUTUS ... 1.403530e+05\n","146826 KULTUURILEHT, SIHTASUTUS ... 4.876108e+06\n","147079 EMAKEELE SIHTASUTUS ... 1.403530e+05\n","\n","[3490 rows x 7 columns]"]},"metadata":{},"execution_count":17}]},{"cell_type":"markdown","metadata":{"id":"qUYAwasT-OGW"},"source":["### Visualiseerime prognoosi ja tegelikud andmed graafikul"]},{"cell_type":"code","metadata":{"id":"OSJ6xcqqjkyg","executionInfo":{"status":"ok","timestamp":1639408937220,"user_tz":-120,"elapsed":5986,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["!pip install -q plotly\n","import plotly.express as px"],"execution_count":18,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":542},"id":"YzUnzqf4jok_","executionInfo":{"status":"ok","timestamp":1639409007626,"user_tz":-120,"elapsed":1444,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"c2052bce-194c-4b7f-8815-646d4a954b95"},"source":["def plot_pred_and_actual(evaluation_table, model_name):\n"," plot_data = evaluation_table.sort_values(by=\"revenue\", ascending=False).iloc[1:120,]\n"," plot_data = plot_data[['name','revenue', 'prediction']]\n"," plot_data = plot_data.melt(id_vars='name', value_vars=['revenue', 'prediction'], var_name='type')\n","\n","\n"," fig = px.line(plot_data, \n"," y='value',\n"," color='type',\n"," title=f\"Prognoositud vs Tegelik müügitulu ({model_name})\")\n"," fig.show()\n","\n","plot_pred_and_actual(linear_eval_table, \"Lineaarne mudel\")"],"execution_count":19,"outputs":[{"output_type":"display_data","data":{"text/html":["\n","\n","\n","
\n"," \n"," \n"," \n"," \n"," \n","
\n","\n",""]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"i6buZJnr4Ubl"},"source":["### Tulemuste statistiline hindamine\n","Tulemuste statistiliseks hindamiseks kasutame kaht mõõdikut: \n","* keskmine absoluutviga\n","* R2 skoor, mis näitab, kui suure osa ennustatavast muutujast suudab meie prognoos ära kirjeldada."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hRZRe9qx4ZNn","executionInfo":{"status":"ok","timestamp":1639409096231,"user_tz":-120,"elapsed":308,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"d62890c0-359d-4f49-a025-37b1556a9d02"},"source":["from sklearn.metrics import mean_absolute_error, r2_score\n","\n","def result_stats_printer(test_result, prediction):\n"," # Arvutame keskmise absoluutvea\n"," mae = mean_absolute_error(test_result, prediction)\n"," print(f\"Mudeli keskmine absoluutviga on {mae:.0f} €\")\n","\n"," # Arvutame R2 statistiku\n"," r2 = r2_score(test_result, prediction)\n"," print(f\"Meie muutujad suudavad kirjeldada {r2*100:.0f}% müügitulu muutusest.\")\n","\n","result_stats_printer(test_result, linear_prediction)"],"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["Mudeli keskmine absoluutviga on 359035 €\n","Meie muutujad suudavad kirjeldada 62% müügitulu muutusest.\n"]}]},{"cell_type":"markdown","metadata":{"id":"AXjHrtzj_u3W"},"source":["## Proovime ka otsustuspuu mudelit"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"HhdMOHNIm8P9","executionInfo":{"status":"ok","timestamp":1639409148301,"user_tz":-120,"elapsed":311,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"38f0e653-c471-4517-cbb4-89bc3aa8e304"},"source":["from sklearn.tree import DecisionTreeRegressor\n","\n","# Treenime mudeli, kasutades treenimise ettenähtud andmeid\n","model = DecisionTreeRegressor(max_depth=5)\n","model.fit(X=train_variables, y=train_result)\n","\n","# Teeme prognoosi testandmete peal\n","tree_prediction = model.predict(X=test_variables)\n","\n","# Prindime tulemused, kasutades eelnevalt defineeritud funktsiooni\n","result_stats_printer(test_result, tree_prediction)\n"],"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["Mudeli keskmine absoluutviga on 318467 €\n","Meie muutujad suudavad kirjeldada 73% müügitulu muutusest.\n"]}]},{"cell_type":"markdown","metadata":{"id":"eNifj6rO-05S"},"source":["### Visualiseerime tulemused\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":542},"id":"cCWMpc7W_JGj","executionInfo":{"status":"ok","timestamp":1639409169144,"user_tz":-120,"elapsed":753,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"8044c414-db4b-4460-827f-316a2b734b9a"},"source":["tree_eval_table = make_evaluation_table(tree_prediction)\n","plot_pred_and_actual(tree_eval_table, \"Otsustuspuu\")"],"execution_count":22,"outputs":[{"output_type":"display_data","data":{"text/html":["\n","\n","\n","