<jupyter_start><jupyter_text>Stack:        Modelo: Xgboost    Validação: AUC    Feature Importance: Shapley Values    Train-test split: 0.8 O nosso principal objetivo foi ter um modelo que conseguisse reconhecer quando um paciente chega no estado avançado do câncer.Para isso, tratamos os estados como:- 0, 1, 2 -> 0- 3, 4 -> 1Ou seja, transformamos em um problema binário. Sendo 1 os casos graves, 0 não graves.Utilizamos o xgboost por ser um modelo que tem uma perfomance boa em relação a dados tabulares.  Radioterapia Lendo os dados...<jupyter_code>data_model = read_sia_model('../data/Linfomas Radioterapia SIA-SUS.csv', method='radioterapia')
data_model = data_model[data_model['AP_CIDPRI'] == 'C81- Linfoma de Hodgkin']
data_model = data_model[data_model['AP_CIDPRI'] == 'C82-C85;C96- Linfoma não Hodgkin']<jupyter_output><empty_output><jupyter_text>Para tratar os dados que na maioria dos datasets estavam desbalanceados, utilizamos a sugestão da documentação do XGBoost. https://xgboost.readthedocs.io/en/latest/tutorials/param_tuning.html :- Balance the positive and negative weights via scale_pos_weight- Use AUC for evaluation<jupyter_code>data_model.groupby('AR_ESTADI')['AP_MVM'].count()<jupyter_output><empty_output><jupyter_text>Tivemos cuidado em selecionar quais features dos modelos para não ter vazamento de dados.Como por exemplo, utilizar a idade para prever se está num estado grave.Também não colocamos colunas sobre Longitude, Latitude, CEP ou dados em que ajudaria a prever o local.<jupyter_code>%time model, X, X_with_cep, y_test, prob_preds, best_preds = train_sia(data_model)
%time model, X, X_with_cep, y_test, prob_preds, best_preds = train_sia_lgb(data_model)<jupyter_output>training model...
ROC_AUC_SCORE: 60.22%
CPU times: user 2.27 s, sys: 33.1 ms, total: 2.3 s
Wall time: 385 ms<jupyter_text>Roc Curves<jupyter_code>proba = pd.DataFrame(prob_preds)
proba[0] = 1 - proba[0]
proba[1] = 1 - proba[0]
skplt.metrics.plot_roc_curve(y_test.values, proba)
plt.show()<jupyter_output><empty_output><jupyter_text>Shapley Values - RelevancePara calcular a importância das features do predict, utilizamos a biblioteca shap.https://github.com/slundberg/shapSHAP (SHapley Additive exPlanations) is a unified approach to explain the output of any machine learning model. SHAP connects game theory with local explanations, uniting several previous methods [1-7] and representing the only possible consistent and locally accurate additive feature attribution method based on expectations (see our papers for details and citations).<jupyter_code>explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

shap.summary_plot(shap_values, X, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Quimioterapia<jupyter_code>data_model = read_sia_model('../data/Linfomas Quimioterapia SIA-SUS.csv', method='quimioterapia')
data_model = data_model[data_model['AP_CIDPRI'] == 'C82-C85;C96- Linfoma não Hodgkin']
%time model, X, X_with_cep, y_test, prob_preds, best_preds = train_sia(data_model)
%time model, X, X_with_cep, y_test, prob_preds, best_preds = train_sia_lgb(data_model)
proba = pd.DataFrame(prob_preds)
proba[0] = 1 - proba[0]
proba[1] = 1 - proba[0]<jupyter_output><empty_output><jupyter_text>Roc Curves<jupyter_code>skplt.metrics.plot_roc_curve(y_test, proba)
plt.show()<jupyter_output><empty_output><jupyter_text>Shapley Values - Relevance  Geral<jupyter_code>explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

shap.summary_plot(shap_values, X, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Análise por estado Códigos: - 11	RO- 12	AC- 13	AM- 14	RR- 15	PA- 16	AP- 17	TO- 21	MA- 22	PI- 23	CE- 24	RN- 25	PB- 26	PE- 27	AL- 28	SE- 29	BA- 31	MG- 32	ES- 33	RJ- 35	SP- 41	PR- 42	SC- 43	RS- 50	MS- 51	MT- 52	GO- 53	DF  Rio de Janeiro<jupyter_code>X_RJ = X_with_cep[(X_with_cep['AP_MUNPCN_CODIGO_UF'] == 33)].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_RJ)

shap.summary_plot(shap_values, X_RJ, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Rio de Janeiro - Duque de Caxias<jupyter_code>filter_loc = (X_with_cep['AP_MUNPCN_CODIGO_UF'] == 33) & (X_with_cep['AP_MUNPCN_NOME'] == 'Duque de Caxias') & \
                (X_with_cep['AP_MVM'] == '2018-12-01')

X_RJ = X_with_cep[filter_loc].drop(['AP_MUNPCN_CODIGO_UF','AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_RJ)

shap.summary_plot(shap_values, X_RJ, plot_type="bar")
X_RJ<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Parana<jupyter_code>X_PR = X_with_cep[X_with_cep['AP_MUNPCN_CODIGO_UF'] == 41].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_PR)

shap.summary_plot(shap_values, X_PR, plot_type="bar")
X_PR = X_with_cep[X_with_cep['AP_MUNPCN_CODIGO_UF'] == 41].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME'], 1)<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Rondonia<jupyter_code>X_RO = X_with_cep[X_with_cep['AP_MUNPCN_CODIGO_UF'] == 11].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_RO)

shap.summary_plot(shap_values, X_RO, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Pernambuco<jupyter_code>X_PE = X_with_cep[X_with_cep['AP_MUNPCN_CODIGO_UF'] == 26].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_PE)

shap.summary_plot(shap_values, X_PE, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  <NAME><jupyter_code>X_MS = X_with_cep[X_with_cep['AP_MUNPCN_CODIGO_UF'] == 50].drop(['AP_MUNPCN_CODIGO_UF',
                                                                 'AP_CEPPCN', 'AP_MUNPCN_NOME', 'AP_MVM'], 1)

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_MS)

shap.summary_plot(shap_values, X_MS, plot_type="bar")<jupyter_output><empty_output><jupyter_text>Caso tenha dúvidas do signficado das colunas, tem um dicionário em notebook/Preprocessamento-SIA.ipynb  Radioterapia + Quimioterapia<jupyter_code>radioterapia = read_sia_model('../data/Linfomas Radioterapia SIA-SUS.csv', method='radioterapia')
quimioterapia = read_sia_model('../data/Linfomas Quimioterapia SIA-SUS.csv', method='quimioterapia')
total = pd.concat([radioterapia, quimioterapia])
model, X, X_with_cep, y_test, prob_preds, best_preds = train_sia(total)<jupyter_output>training model...
ROC_AUC_SCORE: 63.90%<jupyter_text>Roc Curves<jupyter_code>skplt.metrics.plot_roc_curve(y_test, prob_preds)
plt.show()<jupyter_output><empty_output><jupyter_text>Shapley Values - Relevance<jupyter_code>explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

shap.summary_plot(shap_values, X, plot_type="bar")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1065725956182696, 'fraction_numerical': 0.017452655031563312, 'mean_word_length': 5.116578349735049, 'pattern_counts': {'":': 0, '<': 68, '<?xml version=': 0, '>': 70, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 12, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '17', 'dir': 'jupyter-structured-clean-dedup', 'id': '230659', 'license': 'Unlicense', 'n_tokens_mistral': 3356, 'n_tokens_neox': 3185, 'n_words': 612, 'path': 'naliel/notebooks/Modelo-Linfoma.ipynb', 'repo_name': 'helderrezende/naliel_bcggamma', 'size': '8091'}