Ünite 9 / 11

Python ile Otomotiv Verisi Analizi: Uçtan Uca

Kazanimlar:

  • Telemetri, test ve üretim verisini pandas ile yükleyip temizleyen tekrarlanabilir bir analiz iş akışı kurabilme
  • Yapay zekadan kod, öznitelik ve görselleştirme yardımı alırken çıktıyı satır satır anlayıp doğrulayabilme
  • Analiz sonuçlarını birim tutarlılığı, veri sızıntısı ve tekrar üretilebilirlik açısından denetleyebilme

Önceki ünitelerde yapay zekayı bir "danışman" gibi kullandık. Bu ünitede bir adım öteye geçip, otomotiv verisini kendi ellerimizle analiz eden bir iş akışını Python ile kuruyoruz. Amaç sizi bir yazılımcı yapmak değil; AI'dan kod yardımı alırken o kodu satır satır anlayıp doğrulayabilen bir mühendis yapmaktır. Çünkü AI'nın ürettiği kod da tıpkı AI'nın ürettiği metin gibi hatalı olabilir; birim karıştırabilir, veri sızdırabilir, yanlış sütunu ortalayabilir. Kodu anlamadan çalıştırmak, imzasız bir raporu yayımlamak gibidir.

Python neden? Çünkü veri analizinde fiili standarttır: pandas (tablo verisi), numpy (sayısal işlem), matplotlib (grafik) ve scikit-learn (makine öğrenmesi) kütüphaneleriyle telemetri, test ve üretim verisini rahatça işleyebilirsiniz.

Tekrarlanabilir analizin altı adımı

Sağlam bir analiz her zaman aynı iskeleti izler:

  1. Yükle (load): Veriyi dosyadan oku.
  2. Denetle (inspect): Boyut, sütunlar, veri tipleri, eksik değerler.
  3. Temizle (clean): Eksik/aykırı değer, birim, zaman damgası düzeltme.
  4. Özellik çıkar (feature): Anlamlı değişkenler türet.
  5. Analiz/model: İstatistik, görselleştirme veya model.
  6. Doğrula ve raporla: Sonucu sağlama, birim/sızıntı kontrolü, kayıt.
İpucu: AI'dan kod isterken "her adımda ne yaptığını yorum satırıyla açıkla ve varsayımlarını yaz" deyin. Böylece kodu okurken doğrulayabilirsiniz.

Adım adım örnek: telemetri analizi

Aşağıdaki kod bir CAN/telemetri kaydını yükleyip temel denetimi yapar. (Not: kodları çalıştırmadan önce anladığınızdan emin olun; sütun adları sizin veriye göre değişir.)

import pandas as pd# 1) Yükle: yarı-noktalı CSV, ilk sütun zaman damgasıdf = pd.read_csv("telemetri.csv", parse_dates=["zaman"])# 2) Denetleprint(df.shape) # kaç satır, kaç sütunprint(df.dtypes) # her sütunun tipi (sayı mı, metin mi)print(df.isna().sum()) # sütun başına eksik değer sayısıprint(df.describe()) # özet istatistik: min, max, ortalama

describe() çıktısı ilk doğrulama fırsatınızdır: motor devri max değeri 45.000 rpm görünüyorsa (tipik binek motoru ~7.000 rpm) bir birim veya sensör hatası vardır.

Denetim adımında en sık kullanılan pandas komutları ve ne işe yaradıkları:

Komut

Ne yapar

Neyi doğrular

df.shape

Satır/sütun sayısı

Beklenen boyut mu?

df.dtypes

Sütun tipleri

Sayı sütunu metin mi olmuş?

df.isna().sum()

Eksik değer sayımı

Ne kadar boşluk var?

df.describe()

Min/max/ortalama

Fiziksel olarak makul mü?

df.duplicated().sum()

Yinelenen satır

Çift kayıt var mı?

# 3) Temizle: fiziksel olarak imkansız değerleri işaretle# Örnek: motor sıcaklığı -40..150 C dışı ölçüm hatasıdırgecerli = df["motor_sic"].between(-40, 150)print("Aykiri kayit sayisi:", (~gecerli).sum())df.loc[~gecerli, "motor_sic"] = pd.NA # sil yerine NA işaretle

Dikkat: Aykırı değeri hemen silmeyin; önce neden aykırı olduğunu anlayın. Gerçek bir olay (ani ısınma) mı, yoksa sensör arızası mı? Körü körüne silmek gerçek arızayı gizleyebilir.

# 4) Özellik çıkar: sıcaklık artış hızı (türev)df = df.sort_values("zaman")df["sic_artis_hizi"] = df["motor_sic"].diff() / df["zaman"].diff().dt.total_seconds()# 5) Basit görselleştirmeimport matplotlib.pyplot as pltplt.plot(df["zaman"], df["motor_sic"])plt.xlabel("Zaman"); plt.ylabel("Motor sicakligi (C)")plt.title("Motor sicaklik seyri")plt.show()

Veri sızıntısını Python'da önlemek

Bir tahmin modeli kurarken en tehlikeli hata veri sızıntısıdır (5. ünite): modelin, tahmin anında bilinemeyecek bilgiyi görmesi. Zaman serisinde bunu önlemenin altın kuralı: geçmişle eğit, gelecekle test et — rastgele karıştırma yapma.

from sklearn.model_selection import train_test_split# YANLIS: zaman serisini rastgele bölmek geleceği sızdırır# X_tr, X_te = train_test_split(X, shuffle=True) # yapma!# DOGRU: zamana göre bölesik = df["zaman"].quantile(0.8) # ilk %80 geçmişegitim = df[df["zaman"] <= esik]test = df[df["zaman"] > esik] # son %20 gelecek

Dikkat: train_test_split varsayılan olarak veriyi karıştırır (shuffle=True). Zaman serisinde bu, geleceği eğitime karıştırır ve sahte yüksek skor üretir. AI ürettiği kodda bunu yapmışsa mutlaka düzeltin.

Birim tutarlılığı: sessiz katil

Otomotivde en sinsi hatalar birim hatalarıdır: km/s ile m/s, Nm ile lb-ft, bar ile kPa, °C ile K. Analizde her sütunun biriminin ne olduğunu bir sözlükte tutmak ve dönüşümleri açıkça yazmak hayat kurtarır.

# Birimleri açıkça belgelebirimler = {"hiz": "km/s", "motor_sic": "C", "basinc": "bar"}# Gerekliyse açık dönüşüm (km/s -> m/s)df["hiz_ms"] = df["hiz"] / 3.6

Mini vaka çalışmaları

Vaka 1 - describe() ile yakalanan hata. Bir analist AI'dan aldığı kodu çalıştırıp menzil tahmini yapıyor; sonuç absürt yüksek. describe() çıktısına bakınca batarya kapasitesinin bazı satırlarda Wh, bazılarında kWh girildiğini (1000 kat fark) görüyor. Birim tek tipe getirilince sonuç düzeliyor. Sonuç: Basit bir özet istatistik, kötü bir tahmini önledi.

Vaka 2 - Karıştırma tuzağı. Bir stajyerin fren aşınma modeli test setinde %98 doğru. Kod incelenince train_test_split(shuffle=True) ile zaman serisinin karıştırıldığı, yani gelecekteki noktaların eğitime sızdığı görülüyor. Zamana göre bölünce doğruluk %80'e iniyor ama artık gerçekçi. Sonuç: AI kodu çalıştı diye doğru değildi; sızıntıyı insan yakaladı.

Vaka 3 - Aykırı değeri anlamak. Bir dayanıklılık kaydında AI kodu, aykırı gerinim değerlerini otomatik siliyor. Mühendis silinen noktalara bakıyor; bunlar tam da testin ilgilendiği çatlak başlangıcı anlarıymış. Silme kaldırılıp aykırılar ayrıca incelemeye alınıyor. Sonuç: "Temizlik" adı altında gerçek sinyal silinebilir; her adımı sorgulayın.

Prompt şablonları

Şablon 1 - Kod isteme (açıklamalı):

Rol: Python veri analisti mentörüsün.Görev: Bir telemetri CSV'sini yükleyip denetleyen kod yaz.Bağlam: Sütunlar: zaman, hiz(km/s), motor_sic(C), devir(rpm).Kısıt: Her satırı yorumla; hangi kontrolün neden yapıldığınıaçıkla; fiziksel olarak imkansız değer kontrolü ekle; hiçbirşeyi sessizce silme.Çıktı: Yorumlu kod + hangi çıktıya neden bakmam gerektiği.

Şablon 2 - Sızıntı denetimi:

Rol: Makine öğrenmesi kod gözden geçiricisisin.Görev: Aşağıdaki eğitim/test bölme kodunu veri sızıntısıaçısından denetle.Bağlam: Bu bir zaman serisi (araç telemetrisi).Kısıt: Rastgele karıştırma varsa uyar; zamana göre bölmeyiöner ve gerekçelendir.Çıktı: Bulgular + düzeltilmiş kod + açıklama.

Şablon 3 - Birim doğrulama:

Rol: Veri kalite denetçisisin.Görev: Bir DataFrame'de birim tutarsızlığı arayan kontroller öner.Bağlam: Kapasite bazı satırlarda kWh bazılarında Wh olabilir.Çıktı: Kontrol kodu + şüpheli örüntüyü nasıl bulacağım.

Şablon 4 - Görselleştirme + yorum:

Rol: Veri görselleştirme uzmanısın.Görev: Motor sıcaklık seyrini ve artış hızını çizen kod yaz.Kısıt: Eksenleri birimle etiketle; anomaliyi görsel işaretle;grafiği yorumlarken kesin arıza iddiası etme.Çıktı: Kod + grafikte neye dikkat etmem gerektiği.

Zayıf prompt / Güçlü prompt

Zayıf prompt:

Bu veriyle bir model yap.

Hangi hedef, hangi bölme, hangi doğrulama belli değil; AI karıştırmalı, sızıntılı, birim körü bir kod verebilir.

Güçlü prompt:

Rol: Python ML mentörüsün.Görev: Fren balatası aşınmasını tahmin eden bir başlangıç işakışı yaz ve doğrulama tuzaklarını göster.Bağlam: Zaman serisi telemetri; hedef: kalan balata kalınlığı.Kısıt: Zaman serisini zamana göre böl (karıştırma yok); verisızıntısı riskli öznitelikleri işaretle; birimleri belgele;her adımı yorumla; sonuç sahaya çıkmadan önce hangi kontrollerinşart olduğunu yaz.Çıktı: Yorumlu kod + doğrulama kontrol listesi.

Sık yapılan hatalar

  • Kodu anlamadan çalıştırmak. AI kodu da hatalı olabilir; satır satır okuyun.
  • Zaman serisini karıştırmak. shuffle=True geleceği sızdırır ve sahte skor üretir.
  • Aykırı değeri kör silmek. Gerçek sinyal (arıza başlangıcı) silinebilir.
  • Birimi belgelememek. km/s vs m/s, Wh vs kWh gibi hatalar sessizce büyür.
  • describe()/denetim adımını atlamak. Çoğu hata daha ilk özet istatistikte görünür.

Ozetle

  • Python (pandas, numpy, matplotlib, scikit-learn) otomotiv verisi analizinin fiili standardıdır.
  • Tekrarlanabilir analiz: yükle, denetle, temizle, özellik çıkar, analiz et, doğrula ve raporla.
  • AI'nın ürettiği kodu satır satır anlayıp doğrulamak zorunludur; çalışması doğru olduğu anlamına gelmez.
  • Zaman serisinde geçmiş/gelecek ayrımını koruyun; rastgele karıştırma veri sızıntısı yaratır.
  • Birim tutarlılığı ve aykırı değer yorumu sessiz ama kritik doğrulama noktalarıdır.

Uygulama gorevi

Küçük bir veri seti (gerçek veya sentetik telemetri) alın. (1) Altı adımlı iskeleti izleyerek yükleme ve denetim kodunu Şablon 1 ile üretip her satırı anladığınızı teyit edin. (2) describe() çıktısında en az bir şüpheli değer bulun ve nedenini araştırın. (3) Bir tahmin görevinde eğitim/test bölmesini zamana göre yapın ve sızıntı riskini Şablon 2 ile denetleyin. (4) Kullandığınız her sütunun birimini bir sözlükte belgeleyin.

Kontrol listesi

  • [ ] Analizi altı adımlı iskeletle kurdum.
  • [ ] AI'nın ürettiği kodu satır satır okuyup anladım.
  • [ ] describe()/denetim ile şüpheli değerleri araştırdım.
  • [ ] Zaman serisini zamana göre böldüm (karıştırma yok).
  • [ ] Veri sızıntısı riskli öznitelikleri işaretledim.
  • [ ] Her sütunun birimini belgeledim ve dönüşümleri açık yazdım.