Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Python ile Köprü: Aynı Problemi scikit-learn ile Çözmek ve ONNX ile .NET'te Çalıştırmak
Python'da scikit-learn ile eğitilen bir model, preprocessing'iyle birlikte ONNX'e çevrilip .NET'te ONNX Runtime ile aynı sonucu verecek şekilde çalıştırılabilir. Bookstore iptal modelini scikit-learn Pipeline ve cross-validation ile kuruyor, kavramları ML.NET ile eşliyor, skl2onnx ile export edip C#'ta skorluyor; iki taraf arasındaki farkın 10⁻⁷ seviyesinde kaldığını, float tipi, opset ve dönüştürülemeyen adım tuzaklarını gerçek çıktılarla gösteriyoruz.
Modeli Production'a Almak: ASP.NET Core'da PredictionEnginePool, Model Versiyonlama ve Drift
Bir ML.NET modelini ASP.NET Core'da güvenle servis etmenin yolu PredictionEnginePool, modelle birlikte saklanan bir kart ve gerçek sonuçlarla izlenen drift'tir. Bookstore teslim süresi modelini minimal API'ye koyuyor, paylaşılan PredictionEngine'in yük altında yüzde 12 yanlış cevap verdiğini, modeli yeniden başlatmadan güncellemeyi, latency metric'lerini ve girdiler değişmeden bozulan bir modeli gerçek çıktılarla gösteriyoruz.
Model Seçimi ve AutoML: Hyperparameter'lar, Cross-Validation, AutoML API ve Feature Importance
Hyperparameter araması ve AutoML doğru metric ve leakage'sız veriyle model seçimini hızlandırır, ama zayıf bir sinyali güçlendiremez. Bookstore iptal riskinde FastTree için grid ve random search'ü cross-validation ile, ML.NET AutoML API'sini ve accuracy'ye göre arayan mlnet CLI'ı karşılaştırıyor, leakage'lı bir kolonun nasıl 1,0 AUC ürettiğini, Permutation Feature Importance'ı ve yaş ile semt üzerinden bir fairness kontrolünü gerçek çıktılarla gösteriyoruz.
Unsupervised Learning: K-Means ile Müşteri Segmentasyonu ve Satış Anomalisi Tespiti
Label yokken model doğru cevabı değil yapıyı bulur; k-means ve anomaly detection sonuçlarının değeri iş tarafında anlam taşıyıp taşımadıklarıyla ölçülür. Bookstore müşterilerini RFM feature'larıyla k-means ile segmentlere ayırıyor, ölçeklemenin, k seçiminin ve seed'e karşı kararlılığın etkisini, günlük sipariş serisinde ML.NET'in üç anomaly detector'ının kampanyaları, kesintiyi ve fiyat hatasını nasıl ayırdığını gerçek çıktılarla gösteriyoruz.
Classification ve Metric'leri: Confusion Matrix, Precision, Recall, F1 ve ROC-AUC
Dengesiz veride accuracy yanıltır; classification modelini precision, recall, PR-AUC ve iş maliyetine göre seçilmiş bir threshold ile ölçmek gerekir. Bookstore'da sipariş iptal riskini logistic regression ve FastTree ile tahmin ediyor, yüzde 95,8 accuracy'nin hiçbir iptali yakalamadığını, threshold'un validation setinde maliyete göre nasıl seçildiğini, calibration kontrolünü ve yorum metninden konu tahmin eden bir multiclass modeli gerçek çıktılarla gösteriyoruz.
Regression ve Metric'leri: Linear Regression, Gradient Boosting, MAE, RMSE ve R²
Regression bir sayı tahmin eder; doğru metric'i seçmek doğru algoritmayı seçmek kadar önemlidir, çünkü MAE ortalama sapmayı, RMSE büyük hataları, R² ise açıklanan varyansı ölçer. Gradient descent'i C#'ta elle yazıyor, Bookstore teslim süresinde SDCA, FastTree, FastForest ve LightGBM'i karşılaştırıyor, 21 kayıp kargonun RMSE'yi nasıl neredeyse üç katına çıkardığını, residual analizini ve eğitim aralığının dışında iki model ailesinin nasıl farklı davrandığını gerçek çıktılarla gösteriyoruz.
Feature Engineering: Normalization, One-Hot Encoding, Text Featurization ve Eksik Değerler
Feature engineering, ham kolonları modelin kullanabileceği sayılara çevirmek ve iş bilgisini bu sayılara taşımaktır; Bookstore teslim süresinde en büyük kazanç algoritmadan değil, sipariş saatinden türetilen tek bir domain feature'ından geldi. Normalization'ın SDCA'yı nasıl kurtardığını, one-hot ve hashing'i, CustomMapping ile tarih feature'larını, FeaturizeText'i, eksik değerleri ve training-serving skew'i cross-validation ölçümleriyle gösteriyoruz.
İlk ML.NET Modeli: MLContext, IDataView, Pipeline ve Teslim Süresi Tahmini
Bir ML.NET modeli, MLContext üzerinde kurulan ve Fit ile train verisinden öğrenen bir estimator zinciridir; sonuç, kaydedilip yüklenebilen tek bir transformer'dır. Bookstore teslim süresi için input class'ı, lazy IDataView'ı, boş hücrelerin varsayılan olarak 0 okunması tuzağını, SDCA ile ilk regression modelini, PredictionEngine ile tek tahmini, modeli .zip olarak saklamayı ve float/double, kolon adı ve thread-safety hatalarını gerçek çıktılarla gösteriyoruz.
Train/Test Split, Overfitting ve Data Leakage: Model Neden Testte Parlar, Üretimde Çöker?
Model, eğitimde görmediği ve tahmin anında gerçekten elinde olacak bilgilerle ölçülmezse test skoru yalan söyler. Bookstore teslim süresi verisinde ML.NET ile baseline'ları, overfitting eğrisini, teslimattan sonra oluşan bir kolonun ve tüm veriden hesaplanan bir feature'ın yarattığı sahte başarıyı, zaman bazlı split'in yakaladığı kargo gecikmesini, samplingKeyColumnName'i ve cross-validation'ı gerçek ölçümlerle gösteriyoruz.
Data ve Feature: Dataset, Label, Feature Tipleri ve Veri Kalitesi
Bir modelin öğrenebileceği her şey satırlarda, feature'larda ve label'da durur; bu yüzden ilk iş modele değil veriye bakmaktır. Bookstore'un sentetik sipariş export'unda Microsoft.Data.Analysis ve LINQ ile 104 duplicate sipariş, 62 farklı şehir yazımı, kuruş olarak saklanmış tutarlar, negatif label'lar ve yanlış etiketlenmiş yorumlar buluyor, temizleme kararlarını ve kişisel veriyi eğitimden uzak tutmayı konuşuyoruz.
Makine Öğrenmesi Nedir ve Ne Zaman Gerekir? Kural, ML ve LLM Arasında Doğru Seçim
Machine learning, kuralı senin yazdığın değil, geçmiş veriden öğrenilen bir fonksiyondur; elinde etiketli veri ve ölçülebilir bir hedef varsa işe yarar. Bookstore'un teslim süresi için elle yazılmış bir kuralı seed'li sentetik veride ölçüyor, problem tiplerini (regression, classification, clustering, anomaly detection) Bookstore örnekleriyle eşliyor ve klasik ML, deep learning ile LLM arasındaki seçimi konuşuyoruz.
Ekipte ve Kurumda Copilot: Policy'ler, Content Exclusion, Model Erişimi, Kullanım Metrikleri, Maliyet ve Claude Code/Codex ile Karşılaştırma
Kurumda Copilot maliyetini en çok model seçimi ve her push'ta code review belirler: sekiz kişilik bir Business ekibinde Sonnet oturumları ve her push'ta Balanced review ortak havuzu ayın dokuzda birinde bitiriyor, kredinin üçte ikisi review'dan geliyor. Policy katmanları, content exclusion, managed settings ve MCP allowlist, metrikler, audit log, bütçeler ve Claude Code/Codex karşılaştırması.