1
// AŞAMA 1 — PYTHON TEMELİ
Python + NumPy + Pandas + Görselleştirme
Syntax · OOP · Comprehension · NumPy · Pandas · Matplotlib · Seaborn
▶
VariablesOOPList CompLambdaNumPyPandasMatplotlibSeabornCSV/JSON
# ML için kritik Python becerileri
import numpy as np
import pandas as pd
# NumPy — matris işlemleri ML'in kalbi
X = np.random.randn(1000, 10) # 1000 örnek, 10 özellik
W = np.random.randn(10, 1) # ağırlık matrisi
y_pred = np.dot(X, W) # matris çarpımı
# Pandas — veri manipülasyonu
df = pd.read_csv("data.csv")
df.info() # genel bakış
df.describe() # istatistik özeti
df.groupby("kategori")["fiyat"].agg(["mean","std","count"])
# List comprehension — Pythonic
kareler = [x**2 for x in range(10)]
pivot = pd.pivot_table(df, values="satis", index="ay", aggfunc="sum")
💡 Tavsiye: NumPy'yi gerçekten anlamadan ML öğrenmek kör gitmek demektir. Gradient descent, neural network ağırlıkları, PCA — hepsi matris operasyonu.
np.dot() komutunu rüyanda görmeden geçme.Hedef: CSV okuyup, temizleyip, analiz edip, 3 farklı grafik çizebilmek. Bunları ezberden yapabilmek.
2
// AŞAMA 2 — MATEMATİK (ML'NİN KALBİ)
Lineer Cebir + Olasılık + Calculus
Vektör · Matris · Gradient · Bayes · Normal Dağılım · Optimizasyon
▶
Lineer Cebir
Vektör, matris çarpımı, transpoz, determinant, eigenvalue/eigenvector
PCA · Neural Net Weights
Olasılık & İstatistik
Koşullu olasılık, Bayes teoremi, Normal/Bernoulli dağılımlar, CLT, hipotez testi
Naive Bayes · MLE
Türev & Gradyan
Kısmi türev, zincir kuralı, gradient descent — kayıp fonksiyonunu minimize et
Backprop · Optimizer
Optimizasyon
Konveks vs non-konveks, SGD, Adam, learning rate schedules, momentum
Tüm DL eğitimi
Not: Formülleri ezberlemene gerek yok. "Gradient neden hesaplıyoruz?", "Neden matris çarpıyoruz?" sorularını yanıtlayabilmek yeterli. Anlayış > ezber.
3
// AŞAMA 3 — VERİ ANALİZİ (EDA)
Data Cleaning + Feature Engineering + Görselleştirme
Missing data · Outlier · Encoding · Scaling · EDA · Korelasyon
▶
⚠️ Gerçek Dünya: Sektörde zamanın %70'i burada geçer. Kirli veri → yanlış model. "Garbage in, garbage out" — temiz veri yazmak model kurmaktan önemlidir.
# Eksiksiz EDA akışı
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, LabelEncoder
# 1. Genel tanıma
df.shape, df.dtypes
eksik = (df.isnull().sum() / len(df)) * 100
# 2. Outlier — IQR yöntemi
Q1, Q3 = df["fiyat"].quantile([.25, .75])
IQR = Q3 - Q1
df_temiz = df[(df["fiyat"] >= Q1-1.5*IQR) & (df["fiyat"] <= Q3+1.5*IQR)]
# 3. Doldurma stratejileri
df["yas"].fillna(df["yas"].median(), inplace=True) # sayısal
df["sehir"].fillna(df["sehir"].mode()[0], inplace=True) # kategorik
# 4. Feature engineering — yeni özellik yarat
df["gelir_yas_oran"] = df["gelir"] / df["yas"]
df["ay"] = pd.to_datetime(df["tarih"]).dt.month
# 5. Encoding + Scaling
df_enc = pd.get_dummies(df, columns=["sehir"], drop_first=True)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train) # FİT SADECE TRAIN'E!
Korelasyon Analizi
heatmap ile feature ilişkileri. r > 0.9 → multicollinearity riski. Hedef ile korelasyon en önemli.
Feature Importance
Random Forest / XGBoost feature_importances_. SHAP değerleri ile açıklanabilir AI.
Data Leakage
Test verisinden bilgi sızmaz. Scaler fit sadece train'e. Future data kullanma. En ölümcül hata.
4
// AŞAMA 4 — TEMEL MAKİNE ÖĞRENMESİ
Supervised + Unsupervised + Scikit-learn
Linear Reg · Logistic · KNN · Decision Tree · Random Forest · K-Means · PCA
▶
SUPERVISED · REG
Linear Regression
y = Xw+b · MSE minimize · gradient descent
EV FİYAT
SUPERVISED · CLF
Logistic Regression
Sigmoid · binary · multi-class (OvR)
SPAM/HAM
SUPERVISED · DIST
KNN
K komşu · mesafe · scaling zorunlu
TAVSİYE
SUPERVISED · TREE
Decision Tree
Gini impurity · yorumlanabilir · overfit riski
KURAL
ENSEMBLE · 🔥 GÜÇLÜ
Random Forest
N ağaç → oylama · feature importance · baseline
HER YERDE
UNSUPERVISED
K-Means + PCA
Kümeleme · boyut azaltma · elbow method
SEGMENT
# Scikit-learn Pipeline — veri sızıntısı önleme
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, StratifiedKFold, cross_val_score
from sklearn.preprocessing import StandardScaler
pipe = Pipeline([
("scaler", StandardScaler()),
("model", RandomForestClassifier(n_estimators=200, random_state=42, n_jobs=-1))
])
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=.2, stratify=y, random_state=42)
pipe.fit(X_tr, y_tr)
# Stratified K-Fold — güvenilir değerlendirme
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipe, X, y, cv=cv, scoring="f1_weighted")
print(f"F1: {scores.mean():.3f} ± {scores.std():.3f}")
Overfitting Alarm: Train F1: 0.99, Test F1: 0.72 görürsen → overfitting. Çözüm: Daha az özellik, daha az derinlik, regularization (L1/L2), daha fazla veri, dropout (DL için).
5
// AŞAMA 5 — MODEL DEĞERLENDİRME
Metrikler + Karşılaştırma + Hata Analizi
Accuracy · Precision · Recall · F1 · ROC-AUC · Confusion Matrix · Calibration
▶
| METRİK | FORMÜL | NE ZAMAN KULLAN | DİKKAT |
|---|---|---|---|
| Accuracy | (TP+TN)/N | Dengeli sınıf dağılımı | Dengesiz veriyle yanıltıcı! |
| Precision | TP/(TP+FP) | False positive pahalıysa (spam) | Recall azalır |
| Recall | TP/(TP+FN) | False negative tehlikeliyse (kanser) | Precision azalır |
| F1 Score | 2×P×R/(P+R) | Dengesiz veri, her ikisi de önemli | Harmonic mean |
| ROC-AUC | Eğri altı alan | Threshold bağımsız değerlendirme | 0.5 = random, 1.0 = mükemmel |
| RMSE | √(Σ(y-ŷ)²/n) | Regresyon, büyük hata cezası | Outlier'a duyarlı |
# Kapsamlı değerlendirme
from sklearn.metrics import (classification_report, confusion_matrix,
roc_auc_score, roc_curve, RocCurveDisplay)
import matplotlib.pyplot as plt
y_pred = pipe.predict(X_te)
y_prob = pipe.predict_proba(X_te)[:, 1]
print(classification_report(y_te, y_pred, digits=3))
print(f"ROC-AUC: {roc_auc_score(y_te, y_prob):.4f}")
# Confusion matrix görselleştirme
sns.heatmap(confusion_matrix(y_te, y_pred),
annot=True, fmt="d", cmap="Reds")
# Hata analizi — neyi yanlış sınıflandırıyor?
yanlislar = X_te[y_pred != y_te]
yanlislar.describe() # kalıp var mı?
💡 Ekstra Tavsiye — Model Kalibrasyonu: predict_proba() %80 diyorsa gerçekten %80 mi olmalı? Calibration curve ile kontrol et. sklearn.calibration.calibration_curve + CalibratedClassifierCV ile düzelt. Sektörde çok göz ardı edilen ama kritik detay.
6
// AŞAMA 6 — PROJE YAP (EN KRİTİK NOKTA)
Başlangıç → Orta → İleri Projeler
Ev Fiyat · Spam · Churn · Tavsiye · Fraud · Stock
▶
⭐ EN KRİTİK KISIM: Tutorial izlemek = öğrenmek değil. Bir problemi başından sonuna çözmek öğrenmek. Her projede: veri temizle → EDA yap → model kur → değerlendir → yorumla → GitHub'a yükle.
🟢 BAŞLANGIÇ
🏠 Ev Fiyat Tahmini — Regression + feature eng.
📧 Spam Sınıflandırma — NLP + Naive Bayes/LR
📉 Müşteri Terk (Churn) — Binary clf + imbalanced
🟡 ORTA SEVİYE
🎬 Tavsiye Sistemi — Collaborative filtering
💳 Fraud Detection — Dengesiz sınıf, SMOTE
📈 Hisse Tahmini — Time series + LSTM
🔴 İLERİ
🔬 End-to-End ML Pipeline — Airflow + MLflow
🤖 Sentiment Analysis API — BERT + FastAPI
👁️ Görüntü Sınıflandırma — CNN + transfer learning
💡 Proje Yapım Şablonu: README.md + Problem tanımı + Veri kaynağı + EDA notebook + Model karşılaştırma tablosu + Sonuç yorumu + requirements.txt. Bu formata uyan proje CV'den kopya-paste edilir.
7
// AŞAMA 7 — İLERİ MAKİNE ÖĞRENMESİ
Gradient Boosting + XGBoost + Hyperparameter Tuning
XGBoost · LightGBM · CatBoost · Grid Search · Optuna · SHAP · Stacking
▶
# XGBoost — Kaggle'ın favorisi, sektörün standarTı
import xgboost as xgb
from lightgbm import LGBMClassifier
import optuna
xgb_model = xgb.XGBClassifier(
n_estimators=1000, learning_rate=0.05,
max_depth=6, subsample=0.8,
colsample_bytree=0.8, reg_alpha=0.1, # L1
reg_lambda=1.0, early_stopping_rounds=50,
eval_metric="auc", random_state=42
)
# Optuna — Bayesian hyperparameter optimizasyonu
def objective(trial):
params = {
"max_depth": trial.suggest_int("max_depth", 3, 9),
"learning_rate": trial.suggest_float("lr", 0.01, 0.3, log=True),
"n_estimators": trial.suggest_int("n_est", 100, 1000),
}
model = xgb.XGBClassifier(**params)
score = cross_val_score(model, X_tr, y_tr, cv=5, scoring="roc_auc")
return score.mean()
study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=100, n_jobs=-1)
# SHAP — açıklanabilir AI
import shap
explainer = shap.TreeExplainer(xgb_model)
shap_values = explainer.shap_values(X_te)
shap.summary_plot(shap_values, X_te) # hangi özellik neden önemli?
LightGBM vs XGBoost
LightGBM: leaf-wise büyüme → daha hızlı, büyük veri. XGBoost: level-wise → daha stabil. Deney yap, hangisi kazanır bak.
Stacking Ensemble
Level-1: XGB+LGB+RF → Level-2: LogReg. Kaggle'da son %1-2 kazanç buradan gelir. OOF (out-of-fold) ile uygula.
8
// AŞAMA 8 — DERİN ÖĞRENME
Neural Networks + CNN + RNN/LSTM + Transformer
PyTorch · TensorFlow · Backprop · Activation · Regularization · Fine-tuning
▶
# PyTorch — modern standart
import torch
import torch.nn as nn
import torch.optim as optim
class MLPClassifier(nn.Module):
def __init__(self, in_dim: int, n_classes: int):
super().__init__()
self.net = nn.Sequential(
nn.Linear(in_dim, 512), nn.BatchNorm1d(512), nn.ReLU(), nn.Dropout(0.3),
nn.Linear(512, 256), nn.BatchNorm1d(256), nn.GELU(), nn.Dropout(0.2),
nn.Linear(256, 128), nn.BatchNorm1d(128), nn.GELU(),
nn.Linear(128, n_classes)
)
def forward(self, x): return self.net(x)
model = MLPClassifier(in_dim=20, n_classes=2)
optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)
criterion = nn.CrossEntropyLoss()
# HuggingFace Transformers — fine-tuning
from transformers import AutoModelForSequenceClassification, Trainer
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
trainer = Trainer(model=model, train_dataset=train_ds, eval_dataset=val_ds)
trainer.train()
CNN (Görüntü)
Conv2d → BatchNorm → ReLU → MaxPool → Flatten → FC. Transfer learning: ResNet/EfficientNet/CLIP ile başla.
LSTM (Zaman Serisi)
Sekans verisi → hidden state. Vanishing gradient problemi → LSTM/GRU ile çöz. Bidirectional opsiyonu.
Transformer
Self-attention mekanizması. BERT (anlama) vs GPT (üretme). Fine-tuning ile az veriyle güçlü sonuç.
9+
// AŞAMA 9–11 — UZMANLIK + MLOPS + PORTFOLIO
Alan Seç + Deployment + GitHub Portfolio
NLP · CV · Time Series · FastAPI · Docker · MLflow · Kaggle
▶
🔹 NLP (Metin)
Tokenization → embedding → transformer. Ürün: sentiment analyzer, chatbot, özetleyici. HuggingFace ile başla.
🔹 Computer Vision
Object detection (YOLO), segmentation (SAM), classification. PyTorch + timm + albumentations.
🔹 Time Series
Prophet, ARIMA, LSTM, Temporal Fusion Transformer. Finans, talep tahmini, anomali tespiti.
# MLOps — production ML
import mlflow
from fastapi import FastAPI
import joblib
# MLflow — deney takibi
with mlflow.start_run():
mlflow.log_params({"n_estimators": 200, "max_depth": 6})
mlflow.log_metric("roc_auc", 0.947)
mlflow.sklearn.log_model(pipe, "model")
# FastAPI — model servisi
app = FastAPI(title="Churn Prediction")
model = joblib.load("model.pkl")
@app.post("/predict")
async def predict(data: dict):
X = pd.DataFrame([data])
prob = model.predict_proba(X)[0,1]
return {"churn_probability": round(float(prob),4), "high_risk": bool(prob > 0.7)}
🏠 Ev Fiyat Tahmini
📧 Spam Sınıflandırma
📉 Churn Prediction
🎬 Tavsiye Sistemi
💳 Fraud Detection
🤖 NLP Sentiment API