Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Seleção de Features

Olá,

Fiquei com uma dúvida sobre a aula de seleção de features. Aos 8:28 da aula é criado um dataframe chamado "feature_importances" classificando as features mais importantes para posterior seleção em treinamento de um novo modelo.

Porém, o resultado da função de classificação sort_values foi usado apenas para exibição do dataframe classificado, mas, não foi salvo.

Veja que as features mais importantes são:

'airline_BZ', 'is_holiday', 'aircraft_type_Airbus A320', 'aircraft_type_Airbus A330', 'aircraft_type_Embraer E175', 'arrival_time', 'aircraft_type_Boeing 787', 'origin_TCY', ...

feature importances

Ao realizar o teste [1, 5, 10, 15, 20, 25, 30] as features parecem não estar em ordem de importância.

Veja que a relação de features utilizadas para criar o dataframe "X_selected_features" é diferente da relação acima (11:14 da aula)

selected features

Inclusive schengen é a menos importante de todas e aparece como uma feature selecionada.

Eu tive dificuldade de realizar a tarefa mão na massa da aula 04-07, porque o meu modelo foi treinado considerando a classificação de importância e ficou diferente da aula, quando fui criar dados da nova amostra, as colunas divergiam.

Gráfico importância de features

2 respostas
solução!

Olá, Jean! Como vai?

Eu busquei entender o problema e executei pessoalmente os códigos no notebook do projeto.

E de fato, a abordagem correta, para fazer o treinamento dos dados a partir do fatiamento com [1, 5, 10, 15, 20, 25, 30], é usar o dataframe feature_importances de maneira ordenada. Caso contrário, não estaremos avaliando os registros de mais importância em primeiro lugar.

Logo, a correção seria assim:

importances = model_rf.feature_importances_

feature_importances = pd.DataFrame({'Features': X.columns, 'Importances': importances}).sort_values('Importances', ascending=False)

feature_importances

Resultado:

indexFeaturesImportances
4airline_BZ0.5286036452063368
2is_holiday0.14783307902269197
7aircraft_type_Airbus A3200.10071879360375183
8aircraft_type_Airbus A3300.05822149098280576
12aircraft_type_Embraer E1750.045618539258147676
1arrival_time0.037613830096410256
11aircraft_type_Boeing 7870.02466287879520137
20origin_TCY0.022120044946405387
15origin_CSF0.013978980349757517
19origin_PUA0.011385015629117404
21origin_TZF0.005970403408270721
23day_name_Friday0.0008546998031823804
18origin_MWL0.0007074240551889054
9aircraft_type_Boeing 7370.0004699192148406954
22origin_ZQO0.0002345827711675117
14origin_CNU0.00019147544871256293
13origin_AUZ0.000165605360177175
28day_name_Tuesday0.00012940651563430269
24day_name_Monday0.00011365248830468465
10aircraft_type_Boeing 7778.35839732242699e-05
17origin_FJB6.243807171613718e-05
3is_weekend5.496505447368401e-05
29day_name_Wednesday5.360145730571743e-05
26day_name_Sunday4.1888580915603106e-05
27day_name_Thursday3.287513279778531e-05
6airline_YE2.4818275219028023e-05
25day_name_Saturday2.2546048678480562e-05
5airline_MM1.6084189822228395e-05
16origin_EMM1.2415993856759257e-05
0schengen1.3162658854861554e-06

Dessa maneira, o código irá ser coerente com a proposta de treinamento com os elementos de maior importância.

Obrigado pela observação, espero ter esclarecido melhor o assunto e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Obrigado pelo rápido retorno.

No resultado final, a diferença no resultado do R2, foi muito pequena, mas, conceitualmente tinha ficado confuso e não sabia qual abordagem seguir.

Com a sua resposta ficou claro a necessidade de usar a features ordenadas pela importância.