Ejercicio: Visualización de la salida del modelo
En esta unidad, importará Matplotlib al cuaderno en el que ha estado trabajando y lo configurará para admitir la salida de Matplotlib insertada.
Cambie al cuaderno de Azure que ha creado en la sección anterior. Si ha cerrado el cuaderno, puede volver a iniciar sesión en el portal de Microsoft Azure Notebooks, abrir el cuaderno y usar Celda>Ejecutar todo para volver a ejecutar todas las celdas del cuaderno después de abrirlo.
En una celda nueva al final del cuaderno, ejecute las instrucciones siguientes. Ignore los mensajes de advertencia que se muestran relacionados con el almacenamiento de fuentes en caché:
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set()
La primera instrucción es uno de varios comandos mágicos compatibles con el kernel de Python que ha seleccionado al crear el cuaderno. Permite a Jupyter representar la salida de Matplotlib en un cuaderno sin tener que realizar llamadas repetidas a show. Y debe aparecer antes que cualquier referencia a Matplotlib propiamente dicho. La instrucción final configura Seaborn para mejorar la salida de Matplotlib.
Para ver Matplotlib en funcionamiento, ejecute el código siguiente en una celda nueva para trazar la curva ROC para el modelo de Machine Learning que ha creado en el laboratorio anterior:
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')
Confirme que ve la salida siguiente:
Curva ROC generada con Matplotlib
La línea de puntos en el centro del gráfico representa una probabilidad de 50-50 de obtener una respuesta correcta. La curva de color azul representa la precisión del modelo. Y lo más importante, el hecho de que este gráfico aparezca demuestra que se puede usar Matplotlib en un cuaderno de Jupyter.
El motivo de generar un modelo de Machine Learning es para predecir si un vuelo llegará puntual o con retraso. En este ejercicio, escribirá una función de Python que llama al modelo de Machine Learning creado en el laboratorio anterior para calcular la probabilidad de que un vuelo sea puntual. Después, usará la función para analizar diferentes vuelos.
Escriba la siguiente definición de función en una celda nueva y, después, ejecute la celda.
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]
Esta función toma como entrada una fecha y una hora, un código de aeropuerto de origen y un código de aeropuerto de destino, y devuelve un valor entre 0,0 y 1,0 que indica la probabilidad de que el vuelo llegue con puntualidad a su destino. Usa el modelo de Machine Learning que ha creado en el laboratorio anterior para calcular la probabilidad. Y para llamar al modelo, pasa a
predict_proba
un elemento DataFrame que contiene los valores de entrada. La estructura del elemento DataFrame coincide exactamente con la del elemento DataFrame que se ha usado antes.Nota:
En la fecha de entrada para la función
predict_delay
se usa el formato de fecha internacionaldd/mm/year
.Use el código siguiente para calcular la probabilidad de que un vuelo desde Nueva York a Atlanta la noche del 1 de octubre llegue a tiempo. El año que escriba es irrelevante, ya que el modelo no lo usa.
predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')
Confirme que en la salida se muestra que la probabilidad de una llegada puntual es del 60 %:
Predicción de si un vuelo va a llegar con puntualidad
Modifique el código para calcular la probabilidad de que el mismo vuelo un día más tarde llegue a tiempo:
predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')
¿Qué probabilidad hay de que este vuelo llegue con puntualidad? Si los planes de viaje fueran flexibles, ¿consideraría la posibilidad de posponer el viaje un día?
Ahora, modifique el código para calcular la probabilidad de que un vuelo el mismo día por la mañana, de Atlanta a Seattle, llegue a tiempo:
predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')
¿Es probable que este vuelo llegue con puntualidad?
Ahora dispone de una manera sencilla de predecir, con una sola línea de código, la probabilidad de que un vuelo sea puntual o se retrase. No dude en experimentar con otras fechas, horas, orígenes y destinos. Pero recuerde que los resultados solo son significativos para los códigos de aeropuerto ATL, DTW, JFK, MSP y SEA, por tratarse de los únicos con los que se ha entrenado el modelo.
Ejecute el código siguiente para trazar la probabilidad de llegadas puntuales de un vuelo nocturno de JFK a ATL en un intervalo de días:
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))
Confirme que el resultado es similar a este:
Probabilidad de llegadas puntuales para un intervalo de fechas
Modifique el código para generar un gráfico similar para los vuelos que salen de JFK a MSP a las 13:00 del 10 al 16 de abril. ¿Cómo se compara la salida con la del paso anterior?
Por su cuenta, escriba código para trazar en un gráfico la probabilidad de que los vuelos que salen de SEA con destino a ATL a las 9:00, 12:00, 15:00, 18:00 y 21:00 el 30 de enero sean puntuales. Confirme que la salida coincide con esto:
Probabilidad de llegadas puntuales para un intervalo de horas
Si no está familiarizado con Matplotlib y le gustaría obtener más información, encontrará un excelente tutorial en https://www.labri.fr/perso/nrougier/teaching/matplotlib/.. Matplotlib es mucho más de lo que se ha mostrado aquí, uno de los motivos de su gran popularidad en la comunidad de Python.