Bu proje, bir fabrikadaki makinelerden IOT ile alınan veri setinin makine öğrenmesi teknikleri kullanılarak analiz edilmesini kapsamaktadır. Analiz; veri önişleme, keşfedici veri analizi, görselleştirme, model eğitimi ve değerlendirme adımlarını içerir. Sonuçlar, bir fabrikadaki enerji tüketimi, hata tahmini ve makine uyarıları hakkında öngörüler sağlamaya yöneliktir.
- Veri Analizi: Veri setini makine öğrenmesi için temizlemek ve önişlemek.
- Model Eğitimi: Sınıflandırma (hata tahmini gibi) ve regresyon (enerji tüketimi tahmini gibi) için modeller eğitmek.
- Görselleştirme: Veri hakkında görsel çıkarımlar sağlamak.
- Değerlendirme: Uygun metriklerle model performansını değerlendirmek.
- Döküman Hazırlama: Tüm süreci, kodu ve sonuçları net bir şekilde açıklamak.
Veri seti, bir fabrikadan IoT sensör okumalarını içermektedir ve şu sütunlardan oluşmaktadır:
- Machine_ID: Her makine için benzersiz bir tanımlayıcı.
- Timestamp: Okumanın alındığı zaman.
- Temperature_C: Makine sıcaklığı (Celsius cinsinden).
- Vibration_ms2: Titreşim seviyesi (m/s² cinsinden).
- Error_Status: Makine hatalarını belirten ikili durum (0 veya 1).
- Production_Count: Okuma süresince üretim miktarı.
- Energy_Consumption_kWh: Enerji tüketimi (kWh cinsinden).
- Connection_Status: Makine bağlantı durumu (0 veya 1).
- Alerts: Makine tarafından tetiklenen uyarılar.
Bu veri seti ham bir şekilde ,fabrikalara IOT çözümü sunan bir yazılım firmasından alınmıştır.
-
Eksik veriler uygun stratejilerle doldurulmuştur (sayısal veriler için ortalama, kategorik veriler için en sık değer).
data['Temperature_C'] = data['Temperature_C'].fillna(data['Temperature_C'].mean()) data['Vibration_ms2'] = data['Vibration_ms2'].fillna(data['Vibration_ms2'].mean()) data['Error_Status'] = data['Error_Status'].fillna(data['Error_Status'].mode()[0]) data['Alerts'] = data['Alerts'].fillna(data['Alerts'].mode()[0]) # Sebep: #'Ortalama' --> sayısal verilerde genel eğilimi korurken #'En sık değer' --> kategorik sütunlarda sınıf dengesini korur.
-
Kategorik sütunlar için etiket kodlama (label encoding) yapılmıştır.
-
Zaman tabanlı özellikler çıkarılmıştır (saat, gün).
-
Aşağıdaki gibi ek özellikler mühendisliği yapılmıştır:
- Bir üretim birimi başına enerji tüketimi.(Enerji verimliliğini ölçmek için)
- Titreşim ve sıcaklık oranı. (Makine titreşimi ve sıcaklık arasındaki ilişkiyi analiz etmek için)
data['Energy_per_Production'] = data['Energy_Consumption_kWh'] / (data['Production_Count'] + 1e-9) data['Vibration_Temperature_Ratio'] = data['Vibration_ms2'] / (data['Temperature_C'] + 1e-9) ```
Veri görselleştirme aşamasında aşağıdaki analizler ve grafikler hazırlanmıştır:
- Temperature_C, Vibration_ms2, Production_Count, ve Energy_Consumption_kWh değişkenlerinin dağılımını analiz etmek için histogramlar oluşturulmuştur.
- Bu grafikler, verinin simetrik mi, çarpık mı olduğunu ve genel dağılım yapısını incelememizi sağlamıştır.
- Tüm sayısal değişkenler arasındaki ilişkileri analiz etmek için bir korelasyon matrisi hazırlanmıştır.
- Korelasyon matrisi ısı haritası olarak görselleştirilmiştir. Örneğin:
- Energy_Consumption_kWh ve Production_Count arasında yüksek pozitif bir korelasyon gözlenmiştir.
- Temperature_C ve Vibration_ms2 arasındaki zayıf negatif ilişki dikkat çekmiştir.
- Production_Count, Energy_Consumption_kWh ve Vibration_ms2 değişkenlerinin ilişkisini anlamak için 3D scatter grafikleri oluşturulmuştur.
- Grafikler, bu üç değişkenin enerji tüketimi üzerindeki etkisini analiz etmeye yardımcı olmuştur.
- Aykırı değerleri belirlemek için Temperature_C, Vibration_ms2, Production_Count, ve Energy_Consumption_kWh değişkenleri üzerinde kutu grafikleri hazırlanmıştır.
- Bu grafikler, hangi değişkenlerde uç değerlerin yoğun olduğunu göstermiştir. Örneğin: - Production_Count için üst uç değerler gözlemlenmiştir. - Energy_Consumption_kWh için aşırı değerlerin etkisi incelenmiştir.
- Tüm sayısal değişkenler arasındaki ikili ilişkileri görselleştirmek için dağılım matrisleri oluşturulmuştur.
- Bu grafikler, özellikle Production_Count ve Energy_Consumption_kWh arasında doğrusal bir ilişki olduğunu ortaya koymuştur.
Elde edilen görselleştirmeler, verinin genel yapısını anlamamızı ve modelleme süreci için önemli içgörüler sağlamamızı kolaylaştırmıştır.
- Error_Status: Makine hataları Logistic Regression ile tahmin edilmiştir.
Neden seçtik? İkili sınıflandırma problemi olduğu için. Basit ve açıklanabilir bir model.
- Alerts: Makine uyarıları Decision Tree Classifier ile tahmin edilmiştir.
Neden seçtik? Çok sınıflı sınıflandırma problemleri için etkili bir başlangıç algoritması. Karar süreçlerini açıkça görselleştirme imkanı sunar.
- Connection_Status: Bağlantı durumu Random Forest Classifier ile tahmin edilmiştir.
Neden seçtik? Daha karmaşık sınıflandırma problemlerinde etkili. Aykırı değerlere dayanıklı.
- Energy_Consumption_kWh: Enerji tüketimi Random Forest Regressor ile tahmin edilmiştir.
Neden seçtik? Doğrusal olmayan ilişkileri iyi öğrenir. Sayısal bir tahmin problemi.
- Doğruluk (Accuracy): Modelin doğru tahmin oranı.
- Kesinlik (Precision): Doğru pozitiflerin toplam pozitif tahmine oranı.
- Duyarlılık (Recall): Doğru pozitiflerin toplam gerçek pozitiflere oranı.
- F1 Skoru: Kesinlik ve duyarlılığın harmonik ortalaması.
- Ortalama Kare Hatası (MSE): Tahmin edilen değerlerin gerçek değerlerden sapmasını ölçer.
- R² Skoru: Modelin açıklayıcılık oranını belirtir.
- Doğruluk: 0.55
- Kesinlik: 0.55
- Duyarlılık: 0.55
- F1 Skoru: 0.55
Yorum: Model, düşük performans gösterdiği için ek özellik mühendisliği veya daha karmaşık algoritmalar kullanılabilir.
- Doğruluk: 0.64
- Kesinlik: 0.62
- Duyarlılık: 0.65
- F1 Skoru: 0.60
Yorum: Daha fazla veri ve özellik mühendisliğiyle performans artırılabilir.
- Doğruluk: 0.66
- Kesinlik: 0.67
- Duyarlılık: 0.66
- F1 Skoru: 0.66
Yorum: İyi bir performans, ancak hiperparametre optimizasyonuyla daha da iyileştirilebilir.
- MSE: 2.70
- R² Skoru: 0.90
Yorum: Yüksek bir doğruluk oranı, tahminler güvenilir.
Sonuçlar iş problemlerine nasıl uygulanabilir?
- Hata Tahmini: Logistic Regression, temel hata durumlarını anlamaya yönelik kullanılabilir.
- Uyarı Tahmini: Decision Tree'nin düşük performansı, uyarı mekanizmalarının daha fazla veriyle desteklenmesi gerektiğini gösteriyor.
- Bağlantı Durumu: Random Forest Classifier, fabrikalarda bağlantı sorunlarını önceden tahmin etmek için etkili bir araç olabilir.
- Enerji Tüketimi: Enerji tahmini modeli, maliyet azaltma ve verimlilik artırma stratejileri için kullanılabilir.
project/
├── dataset.csv # Veri seti
├── main.py # Ana Python scripti
├── data_preprocessing.py # Veri önişleme modülü
├── model_training.py # Model eğitim modülü
├── visualization.py # Görselleştirme modülü
- 🐍 Python
- pandas
- numpy
- matplotlib
- seaborn
- scikit-learn
- imbalanced-learn
- Proje sunumunu izlemek için https://youtu.be/GlSnvwiHRtA?si=AGebFhZS9QtanMg-
- Model performansını artırmak için hiperparametre optimizasyonu yapılabilir.
- IoT verilerinden daha fazla anlamlı özellik türetilebilir.
- XGBoost veya LightGBM gibi ileri algoritmalar uygulanabilir.