import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22full%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20sklearn.ensemble%20import%20RandomForestClassifier%0A%20%20%20%20from%20sklearn.metrics%20import%20RocCurveDisplay%0A%20%20%20%20from%20sklearn.pipeline%20import%20Pipeline%0A%20%20%20%20from%20sklearn.preprocessing%20import%20StandardScaler%0A%0A%20%20%20%20import%20marimo_sandbox.jp_font%20as%20jp%0A%20%20%20%20from%20marimo_sandbox.data%20import%20load_titanic%0A%20%20%20%20from%20marimo_sandbox.ml%20import%20(%0A%20%20%20%20%20%20%20%20evaluate_model%2C%0A%20%20%20%20%20%20%20%20prepare_titanic_features%2C%0A%20%20%20%20%20%20%20%20split_data%2C%0A%20%20%20%20)%0A%0A%20%20%20%20jp.setup_japanese_font()%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20Pipeline%2C%0A%20%20%20%20%20%20%20%20RandomForestClassifier%2C%0A%20%20%20%20%20%20%20%20RocCurveDisplay%2C%0A%20%20%20%20%20%20%20%20StandardScaler%2C%0A%20%20%20%20%20%20%20%20evaluate_model%2C%0A%20%20%20%20%20%20%20%20load_titanic%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20plt%2C%0A%20%20%20%20%20%20%20%20prepare_titanic_features%2C%0A%20%20%20%20%20%20%20%20split_data%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%20(scikit-learn)%0A%0A%20%20%20%20-%20%E3%82%BF%E3%82%A4%E3%82%BF%E3%83%8B%E3%83%83%E3%82%AF%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8B%E3%82%89%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%92%E6%95%B4%E5%BD%A2%E3%81%97%E3%80%81%E8%A8%93%E7%B7%B4%2F%E3%83%86%E3%82%B9%E3%83%88%E3%81%AB%E5%88%86%E5%89%B2%0A%20%20%20%20-%20%60RandomForestClassifier%60%20%E3%82%92%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E6%A7%8B%E7%AF%89%0A%20%20%20%20-%20**%E4%B8%8B%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%80%E3%83%BC%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99%E3%81%A8%E3%83%A2%E3%83%87%E3%83%AB%E3%81%8C%E5%8D%B3%E5%86%8D%E5%AD%A6%E7%BF%92**%E3%81%95%E3%82%8C%E3%80%81%E8%A9%95%E4%BE%A1%E6%8C%87%E6%A8%99%E3%81%8C%E6%9B%B4%E6%96%B0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(load_titanic%2C%20prepare_titanic_features%2C%20split_data)%3A%0A%20%20%20%20df%20%3D%20load_titanic()%0A%20%20%20%20X%2C%20y%20%3D%20prepare_titanic_features(df)%0A%20%20%20%20X_train%2C%20X_test%2C%20y_train%2C%20y_test%20%3D%20split_data(X%2C%20y)%0A%20%20%20%20return%20X%2C%20X_test%2C%20X_train%2C%20y%2C%20y_test%2C%20y_train%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(X%2C%20mo%2C%20y)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%23%23%23%20%E7%89%B9%E5%BE%B4%E9%87%8F%3A%20%7BX.shape%5B1%5D%7D%20%E5%80%8B%2C%20%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%3A%20%7Blen(X)%7D%20%E4%BB%B6%0A%20%20%20%20%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88(%E7%94%9F%E5%AD%98)%3A%20%7By.sum()%7D%20%E5%90%8D%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%20(%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E8%AA%BF%E6%95%B4)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20n_estimators%20%3D%20mo.ui.slider(10%2C%20200%2C%20value%3D100%2C%20label%3D%22n_estimators%20(%E6%9C%A8%E3%81%AE%E6%95%B0)%22)%0A%20%20%20%20max_depth%20%3D%20mo.ui.slider(2%2C%2020%2C%20value%3D6%2C%20label%3D%22max_depth%20(%E6%B7%B1%E3%81%95)%22)%0A%20%20%20%20min_samples_split%20%3D%20mo.ui.slider(2%2C%2020%2C%20value%3D5%2C%20label%3D%22min_samples_split%22)%0A%20%20%20%20return%20max_depth%2C%20min_samples_split%2C%20n_estimators%0A%0A%0A%40app.cell%0Adef%20_(max_depth%2C%20min_samples_split%2C%20mo%2C%20n_estimators)%3A%0A%20%20%20%20mo.hstack(%5Bn_estimators%2C%20max_depth%2C%20min_samples_split%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Pipeline%2C%0A%20%20%20%20RandomForestClassifier%2C%0A%20%20%20%20StandardScaler%2C%0A%20%20%20%20X_test%2C%0A%20%20%20%20X_train%2C%0A%20%20%20%20evaluate_model%2C%0A%20%20%20%20max_depth%2C%0A%20%20%20%20min_samples_split%2C%0A%20%20%20%20n_estimators%2C%0A%20%20%20%20y_test%2C%0A%20%20%20%20y_train%2C%0A)%3A%0A%20%20%20%20pipeline%20%3D%20Pipeline(%0A%20%20%20%20%20%20%20%20steps%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22scaler%22%2C%20StandardScaler())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20RandomForestClassifier(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20n_estimators%3Dn_estimators.value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20max_depth%3Dmax_depth.value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20min_samples_split%3Dmin_samples_split.value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20random_state%3D42%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20n_jobs%3D-1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20result%20%3D%20evaluate_model(pipeline%2C%20X_train%2C%20X_test%2C%20y_train%2C%20y_test)%0A%20%20%20%20return%20(result%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E8%A9%95%E4%BE%A1%E7%B5%90%E6%9E%9C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20result)%3A%0A%20%20%20%20metrics%20%3D%20mo.ui.table(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E6%8C%87%E6%A8%99%22%3A%20%22Accuracy%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E5%80%A4%22%3A%20f%22%7Bresult%5B'accuracy'%5D%3A.3f%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22%E6%8C%87%E6%A8%99%22%3A%20%22Precision%22%2C%20%22%E5%80%A4%22%3A%20f%22%7Bresult%5B'precision'%5D%3A.3f%7D%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22%E6%8C%87%E6%A8%99%22%3A%20%22Recall%22%2C%20%22%E5%80%A4%22%3A%20f%22%7Bresult%5B'recall'%5D%3A.3f%7D%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22%E6%8C%87%E6%A8%99%22%3A%20%22F1%22%2C%20%22%E5%80%A4%22%3A%20f%22%7Bresult%5B'f1'%5D%3A.3f%7D%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22%E6%8C%87%E6%A8%99%22%3A%20%22ROC-AUC%22%2C%20%22%E5%80%A4%22%3A%20f%22%7Bresult%5B'roc_auc'%5D%3A.3f%7D%22%7D%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20metrics%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20plt%2C%20result)%3A%0A%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(figsize%3D(6%2C%205))%0A%20%20%20%20im%20%3D%20ax.imshow(result%5B%22confusion_matrix%22%5D%2C%20cmap%3D%22Blues%22)%0A%20%20%20%20ax.set_xticks(%5B0%2C%201%5D%2C%20labels%3D%5B%22%E6%AD%BB%E4%BA%A1%22%2C%20%22%E7%94%9F%E5%AD%98%22%5D)%0A%20%20%20%20ax.set_yticks(%5B0%2C%201%5D%2C%20labels%3D%5B%22%E6%AD%BB%E4%BA%A1%22%2C%20%22%E7%94%9F%E5%AD%98%22%5D)%0A%20%20%20%20ax.set_xlabel(%22%E4%BA%88%E6%B8%AC%22)%0A%20%20%20%20ax.set_ylabel(%22%E5%AE%9F%E9%9A%9B%22)%0A%20%20%20%20ax.set_title(%22%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%22)%0A%20%20%20%20for%20i%20in%20range(2)%3A%0A%20%20%20%20%20%20%20%20for%20j%20in%20range(2)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20ax.text(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20j%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20i%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%5B%22confusion_matrix%22%5D%5Bi%2C%20j%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ha%3D%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20va%3D%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3D%22white%22%20if%20result%5B%22confusion_matrix%22%5D%5Bi%2C%20j%5D%20%3E%20200%20else%20%22black%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20fig.colorbar(im%2C%20ax%3Dax)%0A%20%20%20%20mo.mpl.interactive(fig)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(RocCurveDisplay%2C%20mo%2C%20plt%2C%20result%2C%20y_test)%3A%0A%20%20%20%20RocCurveDisplay.from_predictions(%0A%20%20%20%20%20%20%20%20y_test%2C%20result%5B%22y_proba%22%5D%2C%20pos_label%3D1%0A%20%20%20%20).plot()%0A%20%20%20%20plt.title(%22ROC%20%E6%9B%B2%E7%B7%9A%22)%0A%20%20%20%20plt.xlabel(%22False%20Positive%20Rate%22)%0A%20%20%20%20plt.ylabel(%22True%20Positive%20Rate%22)%0A%20%20%20%20mo.mpl.interactive(plt.gcf())%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20plt%2C%20result)%3A%0A%20%20%20%20fig2%2C%20ax2%20%3D%20plt.subplots(figsize%3D(8%2C%204))%0A%20%20%20%20feature_names%20%3D%20%5B%22%E5%AE%A2%E5%AE%A4%E3%82%AF%E3%83%A9%E3%82%B9%22%2C%20%22%E6%80%A7%E5%88%A5%22%2C%20%22%E5%B9%B4%E9%BD%A2%22%2C%20%22%E5%85%84%E5%BC%9F%E5%A7%89%E5%A6%B9%22%2C%20%22%E8%A6%AA%E5%AD%90%22%2C%20%22%E9%81%8B%E8%B3%83%22%2C%20%22%E4%B9%97%E8%88%B9%E6%B8%AF%22%5D%0A%20%20%20%20ax2.barh(feature_names%2C%20result%5B%22feature_importances%22%5D)%0A%20%20%20%20ax2.set_title(%22%E7%89%B9%E5%BE%B4%E9%87%8F%E9%87%8D%E8%A6%81%E5%BA%A6%22)%0A%20%20%20%20ax2.set_xlabel(%22%E9%87%8D%E8%A6%81%E5%BA%A6%22)%0A%20%20%20%20plt.tight_layout()%0A%20%20%20%20mo.mpl.interactive(fig2)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E4%BD%BF%E3%81%84%E6%96%B9%0A%0A%20%20%20%201.%20%E4%B8%8A%E3%81%AE%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%80%E3%83%BC%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E5%A4%89%E6%9B%B4%0A%20%20%20%202.%20%E8%A9%95%E4%BE%A1%E6%8C%87%E6%A8%99%E3%83%BB%E6%B7%B7%E5%90%8C%E8%A1%8C%E5%88%97%E3%83%BBROC%E3%83%BB%E7%89%B9%E5%BE%B4%E9%87%8F%E9%87%8D%E8%A6%81%E5%BA%A6%E3%81%8C%E8%87%AA%E5%8B%95%E3%81%A7%E6%9B%B4%E6%96%B0%E3%81%95%E3%82%8C%E3%82%8B%0A%20%20%20%203.%20%E5%88%A5%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB(%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E5%9B%9E%E5%B8%B0%E7%AD%89)%E3%81%AB%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%20%60ml_pipeline.py%60%20%E3%82%92%E7%B7%A8%E9%9B%86%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
280609f34cacfc48716c1d1bffc29b2b