1. Introdução aos Dados
Os dados foram carregados a partir do arquivo flights.csv
e possuem a seguinte estrutura inicial.
Primeiras 5 Linhas
Esta tabela mostra as primeiras 5 linhas do nosso conjunto de dados. Ela nos dá uma visão rápida de como as informações estão organizadas, incluindo colunas como flight_id (identificação do voo), airline (companhia aérea), aircraft_type (tipo de aeronave) e a variável que queremos prever, o delay (atraso).
flight_id | airline | aircraft_type | schengen | origin | arrival_time | departure_time | day | year | is_holiday | delay | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 26 | MM | Airbus A320 | non-schengen | TCY | 8.885071 | 10.885071 | 0 | 2010 | False | 70.205981 |
1 | 10 | YE | Airbus A320 | non-schengen | TCY | 8.939996 | 11.939996 | 0 | 2010 | False | 38.484609 |
2 | 3 | BZ | Embraer E175 | schengen | TZF | 18.635384 | 22.635384 | 0 | 2010 | False | 2.388305 |
3 | 28 | BZ | Airbus A330 | non-schengen | EMM | 15.967963 | 17.967963 | 0 | 2010 | False | 19.138491 |
4 | 15 | BZ | Airbus A330 | non-schengen | FJB | 16.571894 | 19.571894 | 0 | 2010 | False | 15.016271 |
Últimas 5 Linhas
De forma similar, esta tabela exibe as últimas 5 linhas do nosso conjunto de dados. Isso ajuda a verificar se os dados estão completos e se há alguma diferença no final do arquivo, como o ano que muda para 2022 e a coluna is_holiday (se é feriado) que muda para True
.
flight_id | airline | aircraft_type | schengen | origin | arrival_time | departure_time | day | year | is_holiday | delay | |
---|---|---|---|---|---|---|---|---|---|---|---|
28620 | 15 | BZ | Airbus A330 | non-schengen | FJB | 16.571894 | 19.571894 | 364 | 2022 | True | 63.985223 |
28621 | 16 | MM | Airbus A320 | non-schengen | CSF | 17.041281 | 20.041281 | 364 | 2022 | True | 99.168900 |
28622 | 12 | YE | Airbus A330 | schengen | TZF | 17.313731 | 21.313731 | 364 | 2022 | True | 104.506894 |
28623 | 6 | YE | Boeing 787 | schengen | AUZ | 17.033688 | 19.033688 | 364 | 2022 | True | 95.617697 |
28624 | 6 | YE | Boeing 787 | schengen | AUZ | 17.033688 | 19.033688 | 364 | 2022 | True | 88.654204 |
2. Análise Exploratória dos Dados (EDA)
Gráficos para entender a distribuição e as relações entre as variáveis.
Informações do Dataset
Esta seção descreve a estrutura geral do dataset. Podemos ver que há 28.625 entradas e 11 colunas. A tabela também nos informa o tipo de dado de cada coluna (por exemplo, int64
para números inteiros, object
para texto e float64
para números com casas decimais) e se há valores ausentes.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28625 entries, 0 to 28624
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 flight_id 28625 non-null int64
1 airline 28625 non-null object
2 aircraft_type 28625 non-null object
3 schengen 28625 non-null object
4 origin 28625 non-null object
5 arrival_time 28625 non-null float64
6 departure_time 28625 non-null float64
7 day 28625 non-null int64
8 year 28625 non-null int64
9 is_holiday 28625 non-null bool
10 delay 28625 non-null float64
dtypes: bool(1), float64(3), int64(3), object(4)
memory usage: 2.2+ MB
Análise Descritiva
A análise descritiva nos dá um resumo estatístico das colunas numéricas, como média, desvio padrão (std) e valores mínimo e máximo. Por exemplo, a coluna delay
(atraso) tem um atraso médio de aproximadamente 21.38 minutos, com um desvio padrão de 24.32. Um valor mínimo de atraso negativo (-29.36) pode indicar que alguns voos saíram ou chegaram mais cedo do que o programado.
flight_id | arrival_time | departure_time | day | year | delay | |
---|---|---|---|---|---|---|
count | 28625.000000 | 28625.000000 | 28625.000000 | 28625.000000 | 28625.000000 | 28625.000000 |
mean | 15.534882 | 14.182441 | 16.892441 | 182.029694 | 2016.036084 | 21.378931 |
std | 8.665972 | 4.469733 | 4.469733 | 104.887258 | 4.013511 | 24.316447 |
min | 1.000000 | 0.003923 | 2.003923 | 0.000000 | 2010.000000 | -29.358253 |
25% | 8.000000 | 10.733469 | 14.077691 | 91.000000 | 2013.000000 | 2.535048 |
50% | 15.000000 | 15.496519 | 18.496519 | 182.000000 | 2016.000000 | 15.353328 |
75% | 23.000000 | 17.041281 | 20.041281 | 273.000000 | 2019.000000 | 33.782806 |
max | 30.000000 | 24.000000 | 25.000000 | 364.000000 | 2022.000000 | 146.402773 |
Voos por Companhia Aérea
Este gráfico de barras mostra a quantidade de voos operados por cada companhia aérea. É útil para entender qual companhia tem a maior ou menor representatividade no nosso conjunto de dados.

Voos por Aeronave
Aqui podemos ver a distribuição dos voos por tipo de aeronave. Podemos identificar quais modelos de aeronave são mais comuns no dataset.

Top 10 Atrasos por Tipo de Aeronave
Este gráfico destaca os 10 tipos de aeronave com o maior atraso médio. Ele nos ajuda a identificar rapidamente se alguns modelos específicos estão mais propensos a atrasos.

Distribuição dos Atrasos
O Boxplot é um gráfico que nos mostra a distribuição dos atrasos de voos de forma resumida. A caixa central representa 50% dos dados, a linha no meio é a mediana (valor do meio), e as "antenas" mostram a variação. Os pontos fora das antenas são os outliers (valores extremos), que indicam atrasos muito altos e incomuns.

Atraso Médio por Mês
Este gráfico de linha exibe o atraso médio dos voos ao longo dos meses do ano. Podemos observar se há alguma sazonalidade, ou seja, se os atrasos são maiores em épocas específicas, como no verão ou no inverno, ou durante feriados prolongados.

3. Modelagem e Resultados
Análise da performance do modelo preditivo.
Nesta seção, avaliamos o desempenho do nosso modelo de Machine Learning que foi treinado para prever os atrasos. Os gráficos a seguir nos ajudam a entender o quão bem o modelo está fazendo suas previsões.
Gráfico de Resíduos
Um gráfico de resíduos mostra a diferença entre o valor real e o valor previsto pelo modelo. O ideal é que os pontos estejam espalhados aleatoriamente em torno do zero. Se houver um padrão (como uma curva), isso pode indicar que o modelo não está capturando bem a relação entre as variáveis.

Previsões do Modelo
Este gráfico compara os valores de atraso reais (eixo Y) com as previsões do nosso modelo (eixo X). Uma linha diagonal perfeita (que passaria por todos os pontos) seria um modelo ideal, mas na prática isso raramente acontece. Quanto mais próximos os pontos estiverem da linha, melhor é a performance do modelo, pois significa que as previsões estão muito próximas dos valores reais.
