Em contraste ao que encontrei na opinião do instrutor encontrei outro modelo melhor que o "RandomForest, usando o max_depth = 2". Na realidade esse foi o pior modelo dentro do meu desafio.
modelo_arvore = DecisionTreeClassifier(max_depth=3, random_state=5)
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=5)
pipeline_arvore = imb_pipeline([('oversample', SMOTE()), ('Árvore', modelo_arvore)])
resultados_arvore = cross_val_score(pipeline_arvore, x, y, cv = skf, scoring='f1')
print(f'F1 (Decision Tree):{resultado_arvore.mean()}')
F1 (Decision Tree):0.7085561497326203
modelo_rf = RandomForestClassifier(max_depth=2, random_state=5)
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=5)
pipeline_rf = imb_pipeline([('oversample', SMOTE()), ('random_forest', modelo_rf)])
resultados_rf = cross_val_score(pipeline_rf, x, y, cv = skf, scoring = 'f1')
print(f'F1 (Random Forest):{resultados_rf.mean()}')
F1 (Random Forest):0.6288571392781627
modelo_arvore = DecisionTreeClassifier(max_depth=3, random_state=5)
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=5)
pipeline_arvore = imb_pipeline([('undersample', NearMiss(version=3)), ('Árvore', modelo_arvore)])
resultados_arvore = cross_val_score(pipeline_arvore, x, y, cv = skf, scoring='f1')
print(f'F1 (Decision Tree):{resultado_arvore.mean()}')
F1 (Decision Tree):0.7085561497326203
modelo_rf = RandomForestClassifier(max_depth=2, random_state=5)
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=5)
pipeline_rf = imb_pipeline([('undersample', NearMiss(version=3)), ('random_forest', modelo_rf)])
resultados_rf = cross_val_score(pipeline_rf, x, y, cv = skf, scoring = 'f1')
print(f'F1 (Random Forest):{resultados_rf.mean()}')
F1 (Random Forest):0.6174906570165192
O correto é que quanto menor o F1-socre melhor o modelo correto? Logo seria qualquer um dos dois modelos de DecisionTree, pois ficaram empatados com maior score.