
Zašto Python i šta ćete postići modelima predviđanja
Kada želite da predvidite ishod događaja — kupovinu proizvoda, uspeh kampanje ili vrednost nekretnine — Python vam daje skup alata koji ubrzavaju razvoj i testiranje modela. Vi ćete moći brzo da eksperimentirate sa podacima, izgradite bazni model i iterativno poboljšavate performanse koristeći biblioteke kao što su pandas, scikit-learn, NumPy i, po potrebi, TensorFlow ili PyTorch.
Ovaj prvi deo vodi vas kroz razumevanje problema i pripremu okruženja: šta treba da znate pre nego što počnete da pišete kod, koje korake ne smete preskočiti i kako da postavite realna očekivanja. Fokusiraćemo se na praktične smernice koje možete odmah primeniti.
Šta vam treba pre nego što počnete: alati i koncepti
Da biste radili efikasno, pripremite okruženje i osnove koncepata. Evo kratke liste koja će vam pomoći da započnete bez prekida:
- Instalirane biblioteke: pandas, numpy, scikit-learn, matplotlib/seaborn za vizualizaciju; po potrebi TensorFlow ili PyTorch za duboko učenje.
- Razumevanje tipova problema: klasifikacija (diskretni ishodi) vs. regresija (kontinuirane vrednosti).
- Metrike evaluacije: accuracy, precision/recall, F1, ROC-AUC za klasifikaciju; MAE, MSE, RMSE za regresiju.
- Osnovne prakse reproducibilnosti: postavljanje random_state, beleženje verzija podataka i modela.
Prvi koraci sa podacima: kako ih pripremiti i izabrati pravilan pristup
Pre nego što trenirate model, posvetite vreme prikupljanju i čišćenju podataka — većina loših modela nastaje zbog loših podataka. Sledeći koraci će vam pomoći da uspostavite bazu za uspešnu izgradnju modela:
Razumevanje problema i metrika
Definišite šta tačno treba da predviđate i zašto: koja greška je presudna za vaš poslovni cilj? Ako je reč o detekciji prevara, fokus ćete staviti na recall; ako je reč o predviđanju cene, pratićete RMSE. Ovo upravlja izborom modela i postupcima za balansiranje skupa podataka.
Priprema podataka — čišćenje, transformacije i podela
Obavezni koraci uključuju:
- Uklanjanje ili imputacija nedostajućih vrednosti (pandas, SimpleImputer).
- Enkodiranje kategorijskih varijabli (One-Hot, Target encoding za velike kardinalnosti).
- Skaliranje numeričkih karakteristika (StandardScaler ili MinMaxScaler) kada to zahtevaju modeli.
- Podela skupa na trening i test (train_test_split) i postavljanje validacione strategije (k-fold cross-validation) da biste izbegli overfitting.
Tokom ovih koraka pratite potencijalne izvore curenja podataka (data leakage) i postavite jednostavan bazni model radi reference — često pojednostavljena logistička regresija ili linearni regresor pokazuju da li vaši podaci uopšte nose signal.
Sledeći deo će prikazati konkretan primer koda u Pythonu koji demonstrira pripremu podataka i izgradnju prvog baznog modela, korak po korak.

Praktični primer: priprema podataka i izgradnja baznog modela u Pythonu
Uzmimo jednostavan primer klasifikacije (detekcija kupovine korisnika). Pokazaću ključne korake u Pythonu koristeći pandas i scikit-learn kako biste brzo dobili upotrebljiv bazni model:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score
# Učitavanje podataka
df = pd.read_csv('kupovina.csv')
# Odvajanje ciljne promenljive
X = df.drop('kupi', axis=1)
y = df['kupi']
# Podela skupa
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
# Identifikacija tipova kolona
num_cols = X.select_dtypes(include=['int64','float64']).columns.tolist()
cat_cols = X.select_dtypes(include=['object','category']).columns.tolist()
# Preprocessing pipeline
num_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
cat_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
preprocessor = ColumnTransformer([
('num', num_pipeline, num_cols),
('cat', cat_pipeline, cat_cols)
])
# Model i kompletan pipeline
model_pipeline = Pipeline([
('preproc', preprocessor),
('clf', LogisticRegression(max_iter=1000, random_state=42))
])
# Treniranje i evaluacija
model_pipeline.fit(X_train, y_train)
y_pred = model_pipeline.predict(X_test)
y_proba = model_pipeline.predict_proba(X_test)[:,1]
print(classification_report(y_test, y_pred))
print('ROC-AUC:', roc_auc_score(y_test, y_proba))
Ovaj bazni tok omogućava reproducibilnost i osigurava da transformacije ne curе iz trening u test skup zahvaljujući Pipeline/ColumnTransformer pristupu.
Evaluacija modela i validacioni pristupi
Nakon dobijanja rezultata baznog modela, vreme je za sistematsku evaluaciju. Ne oslanjajte se samo na jedinstvenu podele na trening/test — koristite cross-validation kako biste procenili stabilnost performansi i smanjili rizik od slučajnog dobrog/lošeg split-a.
- StratifiedKFold: za neuravnotežene klase koristite stratifikaciju da bi proporcije klasa bile konzistentne u fold-ovima.
- cross_val_score / cross_validate: vraćaju raspodelu metrike (npr. ROC-AUC, F1) preko fold-ova — gledajte srednju vrednost i standardnu devijaciju.
- Metrički izbor: za neuravnotežene probleme oslanjajte se na precision, recall, F1 i ROC-AUC umesto samo accuracy.
Primer upotrebe cross-validation:
from sklearn.model_selection import cross_val_score, StratifiedKFold
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model_pipeline, X, y, cv=cv, scoring='roc_auc')
print('CV ROC-AUC mean:', scores.mean(), 'std:', scores.std())

Pipelinе i osnovno podešavanje hiperparametara
Kada bazni model radi, sledeći korak je fino podešavanje hiperparametara. Uvek koristite pipeline zajedno sa GridSearchCV/RandomizedSearchCV kako ne biste nehotično izazvali data leakage. Počnite sa malim skupom relevantnih parametara, merite metrike na cross-validation i izbegavajte prekomerno komplikovanje.
- GridSearchCV: dobar za manji broj kombinacija; vraća najbolji estimator spreman za test.
- RandomizedSearchCV: efikasniji pri velikim prostorima hiperparametara.
- Ocena vremena: pratite vreme treniranja jer veći modeli i veća pretraga mogu biti skupi.
Primer GridSearch za logističku regresiju:
from sklearn.model_selection import GridSearchCV
param_grid = {
'clf__C': [0.01, 0.1, 1, 10],
'clf__penalty': ['l2'],
'clf__solver': ['lbfgs']
}
grid = GridSearchCV(model_pipeline, param_grid, cv=cv, scoring='roc_auc', n_jobs=-1)
grid.fit(X_train, y_train)
print('Best params:', grid.best_params_)
print('Best CV ROC-AUC:', grid.best_score_)
Ove tehnike omogućavaju brzo iteriranje od baznog modela do pouzdanijeg rešenja uz jasnu proceduru evaluacije i izbegavanje curenja podataka.
Dalji koraci i preporuke za rad sa prediktivnim modelima
Kada imate funkcionalan model, sledeći koraci prelaze iz istraživanja u proizvodnju i kontinuirano unapređenje. Fokusirajte se na pouzdanost, transparentnost i ponovljivost — ne samo na jedinstvenu metrikу performansi.
Priprema za produkciju
- Automatizujte pipeline za obradu podataka i treniranje modela (CI/CD), i verzionisanje modela (model registry).
- Implementirajte testove za ulazne podatke i detekciju drift-a kako biste brzo uočili promene u performansama.
- Obezbedite logovanje metrika, predikcija i odluka radi audita i poboljšanja.
Praćenje, etika i održavanje
- Periodično re-trenirajte modele na novim podacima i pratite metrike poslovnog uticaja, ne samo tehničke metrike.
- Procenjujte pristrasnost i fer plej — testirajte performanse po podgrupama i dokumentujte ograničenja.
- Održavajte dokumentaciju procesa, odluka i pretpostavki da biste olakšali znanje timu i buduće revizije.
Gde dalje učiti
Za praktična rešenja i primere API-ja i alata koje često koristimo, korisno je konsultovati zvaničnu dokumentaciju kao stalni izvor istinitih informacija: scikit-learn dokumentacija.
Usvajanje ovih praksi pomoći će vam da modeli postanu pouzdan alat u donošenju odluka — fleksibilan, održiv i usklađen sa poslovnim potrebama. Srećno u daljem razvoju i iteracijama vaših modela!
