# Priprava na OZNAL
## Príprava dát
**1. Načítanie dát**
Ak berieme package z tidymodels tak s nim pracujeme takto:
```
tidymodels_prefer() # resolve package conflicts using tidy models methods
data(ames)
ames # Takto si zobrazime data
```
Ak CSV:
```
data <- read_csv(file = "data/Default.csv")
```
**2. Transformácia dát**
Ak máme dáta, ktoré: nie sú symetrické, alebo je veľa napríklad nepomer vysokých a nízkych cien, transformujeme cez logaritmus.
```
ames <- mutate(ames, Sale_Price = log10(Sale_Price))
```
Treba ale ešte pozrieť, či sú dáta zgrupené, môžu byť napríklad viacero duplicitných dát, ktoré sa líšia len v nejakom jednom stĺpci, ktorý vieme zgrupiť:
```
data <- pivot_wider(data, values_from = "Value_SF", names_from = "Area_SF")
```
**3. Vizualizácia dát**
Toto sa nam zide na dense plot a na to aby sme videli aku mame distribuciu.
```
squared_prices = exp(ames$Sale_Prices)
data_bins = seq(min(squared_prices), max(squared_prices), length = 40)
normalization_function = dnorm(data_bins, mean = mean(squared_prices), sd = sd(squared_prices))
hist(squared_prices, probability = TRUE)
lines(data_bins, normalization_function)
```
Potom si zobrazime aj QQ ploty - ak data nasleduju ciaru QQ plotu, mame data v normalnej distribucii. Zobrazime si aj povodne aj tie po zlogaritmovani.
```
qqnorm(ames$Sale_Price)
qqline(ames$Sale_Price)
qqnorm(squared_prices)
qqline(squared_prices)
```
**4. Rozdelenie dát**
Ak máme dataset, kde má pár realít vysoké ceny ale väčšina majú ceny nižšie, obyčajný split nám pravdepodobne rozdelí dáta tak, že budú reality s nižšou cenou zastúpené oveľa častešie, to do určitej mieri rieši **stratified sampling**.
```
set.seed(501)
ames_split <- initial_split(ames, prop = 0.8, strata = Sale_Price)
ames_train <- training(ames_split)
ames_test <- testing(ames_split)
```
Dáta máme pripravené, na základe nich by sme sa už mali vedieť rozhodnúť, čo chceme robiť, môžme robiť **regresiu**, **klasifikáciu**, ...
## Regresia
Ak sme sa rozhodli pre regresiu, ďalej si vyberáme, či chceme (v kóde len špecifikujeme endžin a podľa toho sa vyberie):
- OLR - obyčajnú regresiu ```model <- lm(formula, data, …)```
- Regulerizovanú regresiu (tá zjednodušuje model o oslabovanie predikátov), tá môže byť s Bayesian technikou - ```model <- stan_glm(formula, data, family = "gaussian", …)``` alebo bez ```model <- glmnet(x = matrix, y = vector, family = "gaussian", …)```
**1. Vytvorenie modelu**
```
lm_model <- linear_reg() %>% set_engine("lm")
lm_form_fit <- lm_model %>% fit(Sale_Price ~ Longitude + Latitude, data = ames_train)
```

Dostali sme tabuľku:
- **Longitude** je **-2**, a teda očakávame, že pre každú jednotku, o ktorú sa Longitude **zvýši**, cena **klesne** o 2.
- Latitude je 2.7, a teda očakávame, že keď sa Latitude zvýši o 1, stúpne cena o 2.7.
- **p-value** ak je menšia o **0.05**, je tento predikát pre nás štatisticky významný. Čím je nižší, tým je významnejší.
**2. Predikcia cien pre nové reality**
```
ames_test_small <- ames_test %>% slice(1:5)
predict(lm_form_fit, new_data = ames_test_small)
```
**3. Vizualizácia**
Cez pair ploty:
```
data %$% pairs( ~ Total_SF + Sale_Price + as_factor(Overall_Cond))
```
## Klasifikacia