Özellik Mühendisliği Nedir? (Feature Engineering)
Özellik mühendisliği, mevcut veri setindeki bilgileri kullanarak yeni ve daha bilgilendirici özellikler oluşturma sürecidir. Bu yeni özellikler, model performansını artırmak ve daha iyi sonuçlar elde etmek amacıyla kullanılır. Özellik mühendisliği, veri bilimi ve makine öğrenmesi projelerinde kritik bir aşamayı temsil eder.
Özellik Mühendisliğinin Faydaları:
- Model Performansını ve Doğruluğunu Artırır: Daha anlamlı ve öngörücü özelliklerle modellerin performansı artar.
- Daha İyi Genelleme: Doğru ve etkili özellikler, modellerin farklı veri setlerine daha iyi adapte olmasını sağlar.
- Daha Az Karmaşıklık: Özellik mühendisliği, gereksiz karmaşıklığı azaltarak modellerin daha anlaşılır ve yönetilebilir olmasını sağlar.
- Hızlı Eğitim: Daha az ve anlamlı özelliklerle modeller daha hızlı eğitilebilir.
Özellik Mühendisliği Teknikleri:
- Veri Görselleştirme: Veri setini görselleştirmek, özellikleri anlamak ve yeni özellikler için fikirler edinmek için önemlidir.
- İstatistiksel Teknikler: Korelasyon analizi, ortalama, standart sapma gibi istatistiksel bilgilerle yeni özellikler türetilebilir.
- Alan Bilgisi: Konuyla ilgili bilgi, özelliklerin daha iyi anlaşılmasını sağlar ve bu bilgiye dayalı olarak yeni özellikler tasarlanabilir.
- Makine Öğrenmesi Teknikleri: PCA (Principal Component Analysis), LDA (Linear Discriminant Analysis) gibi teknikler kullanılarak özelliklerin boyutunu azaltabilir veya yeni özellikler türetilebilir.
Özellik Mühendisliği Örnekleri:
Diyelim ki bir e-ticaret platformundasınız ve kullanıcıların ürünleri değerlendirebileceği bir sisteminiz var. Normalde, kullanıcılar bir ürüne 1 ila 5 arasında bir puan verir. Ancak, bu puanlar genellikle genel bir ifade içerir ve spesifik detayları içermez.
Özellik Mühendisliği kapsamında, bu puanları daha anlamlı bir özellik haline getirmek için “Duygu Yoğunluğu” adında yeni bir özellik türetebilirsiniz. Bu özellik, kullanıcı yorumlarının duygusal analizi sonucunda elde edilecek bir değeri ifade eder. Örneğin, bir kullanıcı olumlu bir yorum yapmışsa duygu yoğunluğu yüksek, olumsuz bir yorum yapmışsa düşük olacaktır.
İşte bu özellik mühendisliği örneği, sadece sayısal verilerle değil, metin analizi gibi daha karmaşık bir süreçle de ilgilidir. Bu, sıradan bir puanlama sistemini daha zengin ve anlamlı bir bilgiye dönüştürerek kullanıcı deneyimini daha derinlemesine anlamak için güçlü bir özellik mühendisliği örneğidir.
from textblob import TextBlob
import pandas as pd
# Örnek bir veri seti oluşturalım
data = {'Product': ['Laptop', 'Smartphone', 'Headphones', 'Tablet'],
'Review': ['The laptop is amazing! Best purchase ever.', 'The smartphone is good, but the battery life could be better.', 'Headphones provide excellent sound quality.', 'The tablet is slow and unresponsive. Not satisfied.'],
'Rating': [5, 4, 5, 2]}
df = pd.DataFrame(data)
# Duygu yoğunluğu adında yeni bir özellik türetelim
df['Sentiment'] = df['Review'].apply(lambda x: TextBlob(x).sentiment.polarity)
# Veri setini gösterelim
print(df)
Bu sefer, bir müşteri churn (terk) durumunu belirlemek için bir telekomünikasyon şirketinin müşteri veri setini ele alalım. Özellik mühendisliği yaparak müşteri churn’ünü tahmin edecek bir modele daha iyi girdi sağlamaya çalışalım.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Örnek bir telekomünikasyon müşteri veri seti oluşturalım
data = {'CustomerID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'MonthlyCharge': [80, 120, 100, 50, 60, 90, 110, 95, 75, 130],
'TotalSpent': [800, 2400, 1200, 400, 600, 1800, 2200, 1900, 900, 2600],
'ContractMonths': [12, 24, 12, 1, 6, 18, 24, 20, 8, 36],
'SupportCalls': [2, 3, 1, 0, 1, 2, 3, 1, 0, 4],
'Churn': [0, 1, 0, 0, 0, 1, 1, 0, 0, 1]}
df = pd.DataFrame(data)
# Özellik mühendisliği yapalım
# 1. Müşterinin harcama alışkanlığını belirten 'SpendingScore' özelliğini oluşturalım
df['SpendingScore'] = pd.qcut(df['MonthlyCharge'] * df['ContractMonths'], q=4, labels=False)
# 2. Müşterinin hizmete bağımlılığını belirten 'SupportDependency' özelliğini oluşturalım
df['SupportDependency'] = df['SupportCalls'] / df['ContractMonths']
# Veri setini gösterelim
print(df)
# Bağımsız ve bağımlı değişkenleri ayıralım
X = df[['MonthlyCharge', 'TotalSpent', 'ContractMonths', 'SupportCalls', 'SpendingScore', 'SupportDependency']]
y = df['Churn']
# Veriyi eğitim ve test setlerine bölelim
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Modeli eğitelim (Random Forest kullanalım)
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
# Test seti üzerinde modelin performansını değerlendirelim
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Model Accuracy: {accuracy * 100:.2f}%')
Bu örnekte, çeşitli özellik mühendisliği tekniklerini kullanarak kredi başvurularını daha etkili bir şekilde değerlendirecek bir model oluşturmayı hedefleyelim.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Örnek bir kredi başvuru veri seti oluşturalım
data = {'ApplicantIncome': [5000, 8000, 12000, 3000, 7000, 10000, 15000, 6000, 9000, 11000],
'LoanAmount': [10000, 15000, 20000, 5000, 12000, 18000, 25000, 11000, 16000, 20000],
'CreditScore': [600, 700, 750, 550, 680, 720, 780, 590, 710, 740],
'YearsOfEmployment': [2, 4, 6, 1, 3, 5, 8, 2, 4, 7],
'DebtToIncomeRatio': [0.2, 0.25, 0.3, 0.15, 0.22, 0.28, 0.35, 0.18, 0.24, 0.32],
'Approved': [1, 1, 1, 0, 1, 1, 1, 0, 1, 1]}
df = pd.DataFrame(data)
# Özellik mühendisliği yapalım
# 1. Başvuranın kredi ödeme kapasitesini belirten 'RepaymentCapacity' özelliğini oluşturalım
df['RepaymentCapacity'] = df['ApplicantIncome'] - df['LoanAmount']
# 2. Başvuranın finansal gücünü belirten 'FinancialStrength' özelliğini oluşturalım
df['FinancialStrength'] = df['CreditScore'] * df['YearsOfEmployment']
# Veri setini gösterelim
print(df)
# Bağımsız ve bağımlı değişkenleri ayıralım
X = df[['ApplicantIncome', 'LoanAmount', 'CreditScore', 'YearsOfEmployment', 'DebtToIncomeRatio', 'RepaymentCapacity', 'FinancialStrength']]
y = df['Approved']
# Veriyi eğitim ve test setlerine bölelim
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Modeli eğitelim (Random Forest kullanalım)
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
# Test seti üzerinde modelin performansını değerlendirelim
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Model Accuracy: {accuracy * 100:.2f}%')
Bu örnek, çeşitli özelliklerin birleştirilmesiyle enerji verimliliğini artırmaya yönelik bir modelin nasıl geliştirilebileceğini gösterir.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
# Sürdürülebilirlik Veri Seti Oluşturma
# Örneğin: Enerji tüketimi, üretim miktarı, hava durumu, iş saatleri gibi çeşitli özellikler içeren bir veri seti
# Veri Setini Yükleme
data = pd.read_csv("surdurulebilirlik_verisi.csv")
# Özellik Mühendisliği: Enerji Tüketimi Tahmini
# Enerji tüketimini etkileyen özellikleri seçme ve yeni özellikler türetme
features = data[["Uretim_Miktari", "Hava_Durumu", "Is_Saatleri"]]
target = data["Enerji_Tuketimi"]
# Eğitim ve Test Veri Setlerini Oluşturma
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
# Model Oluşturma ve Eğitme
model = RandomForestRegressor()
model.fit(X_train, y_train)
# Tahmin Yapma
predictions = model.predict(X_test)
# Model Performansını Değerlendirme
mae = mean_absolute_error(y_test, predictions)
print(f"Ortalama Mutlak Hata: {mae} birim")
# Modeli Kullanarak Enerji Tüketimi Optimizasyonu
# Örneğin: İş saatleri dışında enerji tüketimini azaltmaya yönelik stratejiler geliştirme