İçeriğe atla
SinaptikLabAI KNOWLEDGE PLATFORM
DersOrta45 dakikaMachine Learning Engineer · 4. ders

Özellik üretimini eğitim ve servisle aynı hatta taşımak

Kategorik kodlama, ölçekleme ve zaman pencereli toplamların hangi model ailesinde gerektiğini; aynı dönüşümün eğitimde ve serviste nasıl tek kaynaktan üretileceğini öğretir.

Önkoşul: Machine Learning

BU DERSİN SONUNDA

  • Model ailesine göre hangi dönüşümün gerekli hangisinin gereksiz olduğunu seçmek
  • Kategorik alanları kardinaliteye göre doğru yöntemle kodlamak
  • Zaman pencereli toplamları sızıntısız biçimde üretmek
  • Eğitim ile servis arasındaki dönüşüm farkını önleyecek bir hat kurmak
  1. 1

    Teori

    Kavramın çalışma mantığı

  2. 2

    Örnek

    Gerçek bir senaryo üzerinde gösterim

  3. 3

    Lab

    Uygulamalı alıştırma

  4. 4

    Test

    Kısa ölçüm

  5. 5

    Proje

    Rotadaki projeye katkı

Kısa cevap

Özellik mühendisliği, ham alanları modelin öğrenebileceği biçime çevirmektir. İki şey belirleyicidir: dönüşümün seçtiğiniz model ailesi için gerçekten gerekli olup olmadığı ve aynı dönüşümün serviste birebir tekrarlanabilmesi. İkincisi ihmal edildiğinde model doğrulamada iyi, üretimde bozuk çalışır; bunun adı eğitim-servis sapmasıdır.

Teori: dönüşüm kimin için#

Her dönüşüm bir modelin varsayımını karşılamak için vardır. Ölçekleme, uzaklık ya da gradyan temelli yöntemler için gereklidir: katsayılara ceza uygulayan doğrusal modellerde büyük ölçekli bir değişken cezadan orantısız etkilenir. Eşik tabanlı bölme yapan ağaç modelleri içinse ölçekleme hiçbir şey değiştirmez; sıralamayı koruyan her dönüşüm ağaç için görünmezdir.

Kodlama da aynı mantıkla seçilir. Tek-sıcak kodlama kategori sayısı azken temizdir; kardinalite büyüdükçe boyut şişer ve doğrusal modelde katsayılar seyrekleşip kararsızlaşır. Sıra bilgisi taşıyan kategorilerde (küçük, orta, büyük) sıralı kodlama bilgi kazandırır; sıra yoksa kategorilere sayı vermek modele olmayan bir düzen öğretir.

Etkileşim terimleri, tek başına zayıf iki değişkenin birlikte anlam kazandığı durumlar içindir. Ağaç modelleri etkileşimi iç içe bölmeler yoluyla kendiliğinden yakalar; doğrusal modellerde aynı etkinin elle yazılması gerekir. Bu, iki aile arasındaki en pratik iş yükü farkıdır ve beşinci bölümdeki seçimi doğrudan etkiler.

Örnek: model ailesine göre ihtiyaç#

DönüşümDoğrusal modelAğaç tabanlı modelNot
Ölçekleme / standartlaştırmaGerekliGereksizCezalı regresyonda ölçek doğrudan cezayı etkiler
Tek-sıcak kodlamaGerekliÇoğu uygulamada gerekliBazı gerçeklemeler kategorik alanı doğrudan işler
Etkileşim terimiElle yazılırKendiliğinden yakalanırAğaçta derinlik, yakalanabilen etkileşim mertebesini sınırlar
Doğrusal olmayan dönüşümSıklıkla yararlıEtkisizSıralamayı koruyan dönüşüm ağaç için görünmezdir
Eksik değer doldurmaGerekliBazı gerçeklemelerde gereksizDoldurma yapılacaksa gösterge kolonu birlikte ekleyin
Aralıklara bölmeDoğrusal olmayanlığı taşırGenellikle bilgi kaybettirirAğaç zaten eşik arıyor; elle bölmek çözünürlüğü düşürür
Tablo yön gösterir; kesin karar kendi verinizde, altıncı bölümdeki ayrım tasarımına uygun bir karşılaştırmayla verilir.

Zaman pencereli özellikler#

Davranış verisinde en güçlü özellikler genellikle toplamlardır: son bir haftadaki sipariş sayısı, son bir aydaki ortalama sepet tutarı, son girişten bu yana geçen gün. Bu özelliklerin tamamı tahmin anına göre tanımlanır; pencerenin referansı sabit bir takvim tarihi değil, her satırın kendi tahmin anıdır. Referans karıştırıldığında ikinci bölümdeki zaman kaçağı sessizce geri döner.

python
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler

sayisal = ["tutar", "son_giristen_gecen_gun"]
kategorik = ["kanal", "sehir"]

on_isleme = ColumnTransformer([
    ("sayisal", Pipeline([
        ("doldur", SimpleImputer(strategy="median", add_indicator=True)),
        ("olcek", StandardScaler()),
    ]), sayisal),
    ("kategorik", Pipeline([
        ("doldur", SimpleImputer(strategy="most_frequent")),
        # serviste hiç görülmemiş kategori gelebilir: hata değil, sıfır vektör
        ("kodla", OneHotEncoder(handle_unknown="ignore")),
    ]), kategorik),
])

# Dönüşümler modelle aynı nesnede: her katlamada yalnızca o katlamanın
# eğitim bölümüne uydurulur, doğrulama bölümüne yalnızca uygulanır.
hat = Pipeline([("on_isleme", on_isleme), ("model", LogisticRegression())])

Karar: hangi sırayla#

  1. 1Ham alanları sabitle

    Kolon denetiminden geçmiş, tahmin anında elde olduğu kanıtlanmış alanlarla başlayın.

  2. 2Yalnızca zorunlu dönüşümleri yaz

    Seçtiğiniz ailenin gerektirdiği dönüşümleri ekleyin; gereksiz her dönüşüm kalıcı bir bakım yüküdür.

  3. 3Toplamları pencereyle üret

    Her pencereyi satırın kendi tahmin anına göre tanımlayın; pencere uzunluklarını iş döngüsüne göre seçin.

  4. 4Hattı tek nesnede birleştir

    Doldurma, kodlama ve ölçekleme modelle aynı hatta dursun; böylece her katlamada yalnızca eğitim bölümüne uydurulur.

  5. 5Servis yolunu aynı koddan üret

    Eğitimdeki dönüşüm kodu ile servisteki kod aynı kaynaktan gelsin; iki ayrı gerçekleme er ya da geç ayrışır.

Sık yapılan hata#

En pahalı hata hedef kodlamada yapılır: bir kategorinin hedef ortalamasını özellik olarak vermek güçlüdür, ama ortalama tüm veriden hesaplanırsa satırın kendi etiketi kendi özelliğine sızar. Doğrusu, ortalamayı her katlamada yalnızca o katlamanın eğitim bölümünden hesaplamak ve az görülen kategorileri genel ortalamaya doğru yumuşatmaktır. İkinci hata, özellik listesini büyütmeye devam etmektir: her yeni kolon kalıcı bir bakım yükü eklerken kazancı hızla azalır; kolon eklemenin bedeli kalıcı, getirisi geçicidir.

LAB · UYGULAMALI ALIŞTIRMA

Aynı hattı iki model ailesine kurun

  1. 1Üçüncü bölümde çıkardığınız bulgu-karar defterinden dönüşüm adaylarını alıp tek bir hat nesnesine yazın.
  2. 2Doğrusal model için ölçekleme ve tek-sıcak kodlama içeren bir hat, ağaç tabanlı model için dönüşümsüz bir hat kurun.
  3. 3İki hattı da aynı ayrım tasarımıyla çalıştırıp seçtiğiniz metriği ve eğitim süresini kaydedin.
  4. 4En yüksek kardinaliteli kategorik alanı seçip üç kodlamayı (tek-sıcak, sıklık eşiğiyle gruplama, katlama içi hedef kodlama) aynı hatta karşılaştırın.
  5. 5Bir davranış özelliğini iki farklı pencereyle üretip iki sürümün metriğe katkısını yan yana koyun.
  6. 6Hattı tek satırlık bir örnek kayıtla çalıştırıp servis yolunda eğitimdekiyle aynı sayıları ürettiğini doğrulayın.

Beklenen çıktı

İki model ailesi için kurulmuş, dönüşümleri modelle aynı nesnede tutan ve tek satırlık servis çağrısında eğitimdekiyle aynı değerleri ürettiği doğrulanmış bir özellik hattı.

Sık sorulan sorular

Hedef kodlama ne zaman değer?

Kardinalite çok yüksek ve kategori gerçekten hedefle ilişkiliyken. Bedeli, sızıntıya çok açık olması ve az görülen kategorilerde kararsız çalışmasıdır. Katlama içi hesaplama ve yumuşatma uygulanmıyorsa kullanmayın; uygulansa bile gruplanmış sıklık kodlamasıyla karşılaştırıp kazancı ölçün.

Boyut indirgeme özellik mühendisliğinin parçası mı?

Olabilir ama ilk araç değildir. Bileşen çıkarımı yorumlanabilirliği kaybettirir ve kolon sayısını azaltsa da bakım yükünü azaltmaz: bileşenler yine bütün ham alanlara bağımlıdır. Seyrek ve çok geniş matrislerde faydalıdır; onlarca kolonlu tipik bir tablo verisinde çoğu zaman gereksizdir.

Özellik seçimini ne zaman yapmalıyım?

Ayrımdan sonra ve ayrımın içinde. Tüm veriye bakarak yapılan seçim, doğrulama kümesinin bilgisini modele taşır ve skoru iyimserleştirir. Özellik seçimi de bir hiperparametre gibi davranır; bu yüzden katlamanın içinde yapılması gerekir.

LEARN

Machine Learning Engineer rotasına devam et

Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.