Alıştırma - Modelin Çıktısını Görselleştirme

Tamamlandı

Bu ünitede, Matplotlib’i çalışmakta olduğunuz not defterine aktaracaksınız ve not defterini, satır içi Matplotlib çıktılarını destekleyecek biçimde yapılandıracaksınız.

  1. Önceki bölümde oluşturduğunuz Azure not defterine dönün. Not defterini kapattıysanız, Microsoft Azure Notebooks portalında yeniden oturum açabilir, not defterinizi açabilir ve hücreyi açdıktan sonra not defterindeki tüm hücreleri yeniden çalıştırmak için Tümünü Çalıştır hücresini> kullanabilirsiniz.

  2. Not defterinin sonundaki yeni bir hücrede aşağıdaki deyimleri yürütün. Yazı tipini önbelleğe alma hakkındaki uyarı iletilerini yoksayın:

    %matplotlib inline
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.set()
    

    İlk deyim, not defterini oluştururken seçtiğiniz Python çekirdeğinin desteklediği birkaç magic komutundan biridir. Jupyter’in bir not defterindeki Matplotlib çıktılarını arka arkaya show çağrıları yapmasına gerek kalmadan işlemesine olanak tanır. Ayrıca tüm Matplotlib başvurularından önce bulunması gerekir. Son deyim, Seaborn’u Matplotlib çıktılarını geliştirecek biçimde yapılandırır.

  3. Matplotlib’i iş başında görmek için, bir önceki laboratuvarda oluşturduğunuz makine öğrenmesi modelinin ROC eğrisini çizmek üzere şu kodu yeni bir hücrede yürütün:

    from sklearn.metrics import roc_curve
    
    fpr, tpr, _ = roc_curve(test_y, probabilities[:, 1])
    plt.plot(fpr, tpr)
    plt.plot([0, 1], [0, 1], color='grey', lw=1, linestyle='--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    
  4. Şu çıktıyı gördüğünüzü onaylayın:

    ROC curve generated with Matplotlib.

    Matplotlib ile oluşturulan ROC eğrisi

Grafiğin ortasındaki noktalı çizgi, doğru bir yanıt alma olasılığının %50 olduğunu gösterir. Mavi eğri, modelinizin doğruluğunu temsil eder. Daha da önemlisi, bu grafiğin görüntülenebilmesi bir Jupyter not defterinde Matplotlib kullanabileceğiniz anlamına gelir.

Bir makine öğrenmesi modeli oluşturmanızın nedeni, uçuşların gecikip gecikmeyeceğini tahmin etmektir. Bu alıştırmada, bir önceki laboratuvarda oluşturduğunuz makine öğrenmesi modeline çağrı yaparak uçuşun gecikip gecikmeme olasılığını hesaplayan bir Python işlevi yazacaksınız. Ardından bu işlevi kullanarak birkaç uçuşu analiz edeceksiniz.

  1. Aşağıdaki işlev tanımını yeni bir hücreye girip hücreyi çalıştırın.

    def predict_delay(departure_date_time, origin, destination):
        from datetime import datetime
    
        try:
            departure_date_time_parsed = datetime.strptime(departure_date_time, '%d/%m/%Y %H:%M:%S')
        except ValueError as e:
            return 'Error parsing date/time - {}'.format(e)
    
        month = departure_date_time_parsed.month
        day = departure_date_time_parsed.day
        day_of_week = departure_date_time_parsed.isoweekday()
        hour = departure_date_time_parsed.hour
    
        origin = origin.upper()
        destination = destination.upper()
    
        input = [{'MONTH': month,
                  'DAY': day,
                  'DAY_OF_WEEK': day_of_week,
                  'CRS_DEP_TIME': hour,
                  'ORIGIN_ATL': 1 if origin == 'ATL' else 0,
                  'ORIGIN_DTW': 1 if origin == 'DTW' else 0,
                  'ORIGIN_JFK': 1 if origin == 'JFK' else 0,
                  'ORIGIN_MSP': 1 if origin == 'MSP' else 0,
                  'ORIGIN_SEA': 1 if origin == 'SEA' else 0,
                  'DEST_ATL': 1 if destination == 'ATL' else 0,
                  'DEST_DTW': 1 if destination == 'DTW' else 0,
                  'DEST_JFK': 1 if destination == 'JFK' else 0,
                  'DEST_MSP': 1 if destination == 'MSP' else 0,
                  'DEST_SEA': 1 if destination == 'SEA' else 0 }]
    
        return model.predict_proba(pd.DataFrame(input))[0][0]
    

    Bu işlev girdi olarak bir tarih ve saat, bir kalkış havaalanı kodu ve bir varış havaalanı kodu alır. Ardından 0.0 ila 1.0 arasında bir değer döndürür. Bu değer, uçuşun hedefine zamanında varma olasılığını belirtir. Olasılık hesaplanırken, bir önceki laboratuvarda oluşturduğunuz makine öğrenmesi modeli kullanılır. Modele çağrı yapmak içinse girdi değerlerini içeren bir DataFrame’i predict_proba tarafına geçirir. Bu DataFrame’in yapısı, daha önce kullandığımız DataFrame’in yapısıyla tamamen aynıdır.

    Dekont

    predict_delay işlevindeki tarih girişlerinde uluslararası tarih biçimi olan dd/mm/year biçimini kullanılır.

  2. Aşağıdaki kodu kullanarak, 1 Ekim’de New York’tan kalkıp Atlanta’ya giden bir uçuşun zamanında varma olasılığını hesaplayın. Model yıl bilgisini kullanmadığı için girdiğiniz yıl alakalı değildir.

    predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')
    

    Çıktının, zamanında varma olasılığını %60 olarak gösterdiğini onaylayın:

    Predicting whether a flight will arrive on time.

    Bir uçuşun zamanında varıp varmayacağını tahmin etme

  3. Aynı uçuş bir gün sonra gerçekleştiğinde zamanında varma olasılığını hesaplamak için kodu değiştirin:

    predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')
    

    Bu uçuşun zamanında varma olasılığı nedir? Seyahat planlarınızın esnek olduğu durumlarda uçuşunuzu bir gün ertelemeyi tercih eder miydiniz?

  4. Şimdi de aynı gün içinde Atlanta’dan Seattle’a gerçekleşen bir sabah uçuşunun zamanında varma olasılığını hesaplamak için kodu değiştirin:

    predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')
    

    Bu uçuşun zamanında varma olasılığı yüksek midir?

Artık tek bir kod satırından faydalanarak, bir uçuşun gecikip gecikmeyeceğini kolayca tahmin edebilirsiniz. Diğer tarihler, saatler, kalkış konumları ve varış konumlarıyla dilediğiniz gibi deneme yapabilirsiniz. Ancak bu modelin ATL, DTW, JFK, MSP ve SEA havaalanı kodlarıyla eğitildiğini ve dolayısıyla sonuçların anlamlı olması için bunların kullanılması gerektiğini unutmayın.

  1. JFK’den kalkıp ATL’ye giden bir akşam uçuşunun belirli bir gün aralığı içindeki zamanında varma olasılığını grafikte göstermek için aşağıdaki kodu çalıştırın:

    import numpy as np
    
    labels = ('Oct 1', 'Oct 2', 'Oct 3', 'Oct 4', 'Oct 5', 'Oct 6', 'Oct 7')
    values = (predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('3/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('4/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('5/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('6/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('7/10/2018 21:45:00', 'JFK', 'ATL'))
    alabels = np.arange(len(labels))
    
    plt.bar(alabels, values, align='center', alpha=0.5)
    plt.xticks(alabels, labels)
    plt.ylabel('Probability of On-Time Arrival')
    plt.ylim((0.0, 1.0))
    
  2. Çıktının şuna benzediğini onaylayın:

    Probability of on-time arrivals for a range of dates.

    Bir tarih aralığındaki zamanında varma olasılığı

  3. Kodu, 10 Nisan ile 16 Nisan tarihleri arasında saat 13:00'te MSP için JFK'den ayrılan uçuşlar için benzer bir grafik oluşturacak şekilde değiştirin. Burada elde edilen çıktı ile bir önceki adımda elde edilen çıktı arasında ne fark var?

  4. 30 Ocak'ta SAAT 09:00, öğlen, 18:00, 18:00 ve 21:00'de SEA'den kalkan uçuşların zamanında varma olasılığını graf etmek için kendi kendinize kod yazın. Çıktının şununla aynı olduğunu onaylayın:

    Probability of on-time arrivals for a range of times.

    Belirli saatlerde zamanında varma olasılığı

Matplotlib’i kullanmaya yeni başladıysanız ve daha fazla bilgi edinmek istiyorsanız https://www.labri.fr/perso/nrougier/teaching/matplotlib/. adresinde harika bir öğretici bulabilirsiniz. Matplotlib, burada gösterilenlerden çok daha fazlasını yapmanıza olanak tanır ve bu, Python kullanıcıları arasında bu kadar popüler olmasının nedenlerinden biridir.