연습 - 모델 출력 시각화
이 단원에서는 Matplotlib를 작업 중인 Notebook에 가져오고 인라인 Matplotlib 출력을 지원하도록 Notebook을 구성합니다.
이전 섹션에서 만든 Azure Notebook으로 다시 전환합니다. Notebook을 닫은 경우 Microsoft Azure Notebooks 포털에 다시 로그인하고, Notebook을 열고, 셀 ->모두 실행을 사용하여 Notebook의 모든 셀을 다시 실행할 수 있습니다.
Notebook의 끝에 있는 새 셀에서 다음 명령문을 실행합니다. 글꼴 캐싱과 관련하여 표시되는 경고 메시지는 무시하세요.
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set()
첫 번째 명령문은 Notebook을 만들 때 선택한 Python 커널에서 지원하는 여러 magic 명령 중 하나입니다. 이를 통해 Jupyter는 show를 반복적으로 호출하지 않고도 Notebook에서 Matplotlib 출력을 렌더링할 수 있습니다. 이 명령문은 Matplotlib 자체에 대한 참조 앞에 나와야 합니다. 최종 명령문은 Matplotlib의 출력을 향상시키도록 Seaborn을 구성합니다.
Matplotlib가 작동하는지 확인하려면 새 셀에서 다음 코드를 실행하여 이전 랩에서 작성한 기계 학습 모델에 대한 ROC 곡선을 그립니다.
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')
다음 출력이 표시되는지 확인합니다.
Matplotlib를 사용하여 생성된 ROC 곡선
그래프 중앙에 있는 점선은 올바른 답을 얻을 확률이 50-50입니다. 파란색 곡선은 모델의 정확도를 나타냅니다. 무엇보다도 이 차트가 전혀 나타나지 않는다는 사실은 Jupyter Notebook에서 Matplotlib를 사용할 수 있음을 보여 줍니다.
기계 학습 모델을 작성한 이유는 항공편이 정시에 도착할 것인지, 아니면 늦게 도착할 것인지를 예측하기 위한 것입니다. 이 연습에서는 이전 랩에서 작성한 기계 학습 모델을 호출하여 항공편이 정시에 도착할 가능성을 계산하는 Python 함수를 작성합니다. 그런 다음, 이 함수를 사용하여 여러 항공편을 분석합니다.
새 셀에서 다음 함수 정의를 입력한 다음, 해당 셀을 실행합니다.
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]
이 함수는 날짜와 시간, 출발지 공항 코드 및 목적지 공항 코드를 입력으로 사용하고, 항공편이 목적지에 정시에 도착할 확률을 나타내는 0.0~1.0의 값을 반환합니다. 이전 랩에서 작성한 기계 학습 모델을 사용하여 확률을 컴퓨팅합니다. 그리고 모델을 호출하기 위해 입력 값이 포함된 DataFrame을
predict_proba
로 전달합니다. DataFrame의 구조는 앞에서 사용한 DataFrame의 구조와 정확히 일치합니다.참고
predict_delay
함수에 대한 날짜 입력은dd/mm/year
국제 날짜 형식을 사용합니다.아래 코드를 사용하여 10월 1일 저녁 뉴욕에서 애틀랜타로 운항하는 항공편이 정시에 도착할 확률을 컴퓨팅합니다. 입력하는 연도는 모델에서 사용되지 않으므로 관련이 없습니다.
predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')
출력에서 정시 도착 가능성이 60%인지 확인합니다.
항공편의 정시 도착 여부에 대한 예측
다음 날 동일한 항공편이 정시에 도착할 확률을 계산하도록 코드를 수정합니다.
predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')
이 항공편이 정시에 도착할 가능성은 얼마나 될까요? 유연한 여행 계획이라면 여행을 하루 연기하는 것이 어떨까요?
이제 코드를 수정하여 같은 날 애틀랜타에서 시애틀로 운항하는 아침 항공편이 정시에 도착할 확률을 컴퓨팅합니다.
predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')
이 항공편은 정시에 도착할 수 있을까요?
이제 한 줄의 코드를 사용하여 항공편이 정시에 도착할지, 아니면 늦게 도착할지 여부를 쉽게 예측할 수 있습니다. 다른 날짜, 시간, 출발지 및 목적지를 자유롭게 실험해 보세요. 그러나 ATL, DTW, JFK, MSP 및 SEA 공항 코드가 모델에서 학습된 유일한 공항 코드이므로 해당 공항 코드에 대한 결과만 의미가 있습니다.
다음 코드를 실행하여 날짜 범위 동안 JFK에서 ATL로 운항하는 저녁 항공편에 대한 정시 도착 확률을 계산합니다.
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))
출력이 다음과 같이 표시되는지 확인합니다.
날짜 범위에 대한 정시 도착 확률
4월 10일부터 4월 16일까지 오후 1시에 JFK에서 MSP로 운항하는 항공편에 대해 비슷한 차트를 생성하도록 코드를 수정합니다. 이전 단계의 출력과 비교할 때 어떻게 될까요?
사용자 고유의 코드를 작성하여 1월 30일 오전 9시, 정오, 오후 3시, 오후 6시, 오후 9시에 SEA에서 ATL로 떠나는 항공편이 정시에 도착할 확률을 그래프로 작성합니다. 출력이 다음과 일치하는지 확인합니다.
시간 범위에 대한 정시 도착 확률
Matplotlib를 처음 사용하고 이에 대해 자세히 알아보려면 https://www.labri.fr/perso/nrougier/teaching/matplotlib/.에서 훌륭한 자습서를 찾을 수 있습니다. Matplotlib에는 여기서 보여 준 것보다 훨씬 더 많은 것이 있습니다. 이것이 Python 커뮤니티에서 인기 있는 한 가지 이유입니다.