From 73da06dae08d922c65e52c1262c6cae07ff323d4 Mon Sep 17 00:00:00 2001 From: bkoseoglu Date: Tue, 8 Oct 2024 10:23:24 +0100 Subject: [PATCH] add benchmarking to paper experiment --- docs/shapely_select_paper_experiment.ipynb | 1286 ++++++++++++++++- ...t_paper_experiment_without_benchmark.ipynb | 746 ++++++++++ 2 files changed, 1963 insertions(+), 69 deletions(-) create mode 100644 docs/shapely_select_paper_experiment_without_benchmark.ipynb diff --git a/docs/shapely_select_paper_experiment.ipynb b/docs/shapely_select_paper_experiment.ipynb index 370d237..46339cd 100644 --- a/docs/shapely_select_paper_experiment.ipynb +++ b/docs/shapely_select_paper_experiment.ipynb @@ -2,14 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Loading dataset...\n" + "Loading dataset...\n", + "\n", + "--- No Feature Selection ---\n", + "No Feature Selection completed in 0.67 seconds with 30 features.\n", + "\n", + "--- Shapely Select with p-value=0.01 ---\n" ] }, { @@ -172,18 +177,1029 @@ "name": "stdout", "output_type": "stream", "text": [ - "Shapely Select completed in 20.51 seconds with 8 selected features.\n", - "SHAP Selection completed in 1.58 seconds with 15 selected features.\n", - "RFE completed in 8.38 seconds with 15 selected features.\n", - "HISEL selection completed in 128.99 seconds with 30 selected features.\n", - "Boruta completed in 41.20 seconds with 10 selected features.\n", - "Experiment results:\n", - " Method Selected Features Accuracy F1 Score Runtime (s)\n", - "0 Shapely Select 8 0.999661 0.884462 20.513361\n", - "1 SHAP Selection 15 0.999649 0.880000 1.580263\n", - "2 RFE 15 0.999625 0.873016 8.382496\n", - "3 HISEL 30 0.999625 0.874016 128.987323\n", - "4 Boruta 10 0.999637 0.877470 41.201014\n" + "Shapely Select with p-value 0.01 completed in 41.28 seconds with 6 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26']\n", + "\n", + "--- Shapely Select with p-value=0.02 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.02 completed in 29.96 seconds with 6 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26']\n", + "\n", + "--- Shapely Select with p-value=0.03 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.03 completed in 32.94 seconds with 6 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26']\n", + "\n", + "--- Shapely Select with p-value=0.04 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.04 completed in 34.04 seconds with 7 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26', 'Amount']\n", + "\n", + "--- Shapely Select with p-value=0.05 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.05 completed in 33.59 seconds with 8 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26', 'Amount', 'V12']\n", + "\n", + "--- Shapely Select with p-value=0.07 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.07 completed in 37.50 seconds with 8 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26', 'Amount', 'V12']\n", + "\n", + "--- Shapely Select with p-value=0.1 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.1 completed in 36.40 seconds with 9 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26', 'Amount', 'V12', 'V18']\n", + "Saved plot for Shapely Select p-value benchmarking.\n", + "\n", + "--- SHAP Selection ---\n", + "SHAP Selection completed in 1.75 seconds with 15 selected features: Index(['V14', 'V4', 'V12', 'V10', 'V3', 'V8', 'V19', 'Time', 'V15', 'Amount',\n", + " 'V7', 'V26', 'V5', 'V6', 'V16'],\n", + " dtype='object')\n", + "\n", + "--- RFE ---\n", + "RFE completed in 9.06 seconds with 15 selected features: Index(['Time', 'V1', 'V3', 'V4', 'V7', 'V8', 'V10', 'V12', 'V14', 'V16', 'V17',\n", + " 'V26', 'V27', 'V28', 'Amount'],\n", + " dtype='object')\n", + "\n", + "--- HISEL ---\n", + "HISEL completed in 139.07 seconds with 30 selected features: ['V28', 'Time', 'Amount', 'V27', 'V26', 'V25', 'V24', 'V23', 'V22', 'V21', 'V20', 'V19', 'V18', 'V17', 'V16', 'V14', 'V2', 'V6', 'V5', 'V9', 'V1', 'V7', 'V8', 'V4', 'V3', 'V12', 'V15', 'V13', 'V11', 'V10']\n", + "\n", + "--- Boruta ---\n", + "Boruta completed in 41.97 seconds with 10 selected features: ['V1', 'V4', 'V7', 'V8', 'V10', 'V12', 'V14', 'V17', 'V28', 'Amount']\n", + "\n", + "--- Experiment Results ---\n", + " Method Selected Features Accuracy F1 Score Runtime (s)\n", + "0 No Feature Selection 30 0.999614 0.870588 0.666203\n", + "1 Shapely Select (p=1%) 6 0.999625 0.873016 41.278282\n", + "2 Shapely Select (p=2%) 6 0.999625 0.873016 29.960288\n", + "3 Shapely Select (p=3%) 6 0.999625 0.873016 32.939579\n", + "4 Shapely Select (p=4%) 7 0.999637 0.875502 34.040012\n", + "5 Shapely Select (p=5%) 8 0.999661 0.884462 33.587693\n", + "6 Shapely Select (p=7%) 8 0.999661 0.884462 37.495704\n", + "7 Shapely Select (p=10%) 9 0.999637 0.875502 36.402660\n", + "8 SHAP Selection 15 0.999649 0.880000 1.748370\n", + "9 RFE 15 0.999625 0.873016 9.062131\n", + "10 HISEL 30 0.999625 0.874016 139.066404\n", + "11 Boruta 10 0.999637 0.877470 41.970272\n" ] }, { @@ -217,72 +1233,145 @@ " \n", " \n", " 0\n", - " Shapely Select\n", + " No Feature Selection\n", + " 30\n", + " 0.999614\n", + " 0.870588\n", + " 0.666203\n", + " \n", + " \n", + " 1\n", + " Shapely Select (p=1%)\n", + " 6\n", + " 0.999625\n", + " 0.873016\n", + " 41.278282\n", + " \n", + " \n", + " 2\n", + " Shapely Select (p=2%)\n", + " 6\n", + " 0.999625\n", + " 0.873016\n", + " 29.960288\n", + " \n", + " \n", + " 3\n", + " Shapely Select (p=3%)\n", + " 6\n", + " 0.999625\n", + " 0.873016\n", + " 32.939579\n", + " \n", + " \n", + " 4\n", + " Shapely Select (p=4%)\n", + " 7\n", + " 0.999637\n", + " 0.875502\n", + " 34.040012\n", + " \n", + " \n", + " 5\n", + " Shapely Select (p=5%)\n", " 8\n", " 0.999661\n", " 0.884462\n", - " 20.513361\n", + " 33.587693\n", " \n", " \n", - " 1\n", + " 6\n", + " Shapely Select (p=7%)\n", + " 8\n", + " 0.999661\n", + " 0.884462\n", + " 37.495704\n", + " \n", + " \n", + " 7\n", + " Shapely Select (p=10%)\n", + " 9\n", + " 0.999637\n", + " 0.875502\n", + " 36.402660\n", + " \n", + " \n", + " 8\n", " SHAP Selection\n", " 15\n", " 0.999649\n", " 0.880000\n", - " 1.580263\n", + " 1.748370\n", " \n", " \n", - " 2\n", + " 9\n", " RFE\n", " 15\n", " 0.999625\n", " 0.873016\n", - " 8.382496\n", + " 9.062131\n", " \n", " \n", - " 3\n", + " 10\n", " HISEL\n", " 30\n", " 0.999625\n", " 0.874016\n", - " 128.987323\n", + " 139.066404\n", " \n", " \n", - " 4\n", + " 11\n", " Boruta\n", " 10\n", " 0.999637\n", " 0.877470\n", - " 41.201014\n", + " 41.970272\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Method Selected Features Accuracy F1 Score Runtime (s)\n", - "0 Shapely Select 8 0.999661 0.884462 20.513361\n", - "1 SHAP Selection 15 0.999649 0.880000 1.580263\n", - "2 RFE 15 0.999625 0.873016 8.382496\n", - "3 HISEL 30 0.999625 0.874016 128.987323\n", - "4 Boruta 10 0.999637 0.877470 41.201014" + " Method Selected Features Accuracy F1 Score Runtime (s)\n", + "0 No Feature Selection 30 0.999614 0.870588 0.666203\n", + "1 Shapely Select (p=1%) 6 0.999625 0.873016 41.278282\n", + "2 Shapely Select (p=2%) 6 0.999625 0.873016 29.960288\n", + "3 Shapely Select (p=3%) 6 0.999625 0.873016 32.939579\n", + "4 Shapely Select (p=4%) 7 0.999637 0.875502 34.040012\n", + "5 Shapely Select (p=5%) 8 0.999661 0.884462 33.587693\n", + "6 Shapely Select (p=7%) 8 0.999661 0.884462 37.495704\n", + "7 Shapely Select (p=10%) 9 0.999637 0.875502 36.402660\n", + "8 SHAP Selection 15 0.999649 0.880000 1.748370\n", + "9 RFE 15 0.999625 0.873016 9.062131\n", + "10 HISEL 30 0.999625 0.874016 139.066404\n", + "11 Boruta 10 0.999637 0.877470 41.970272" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAIjCAYAAAAEFA25AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtWUlEQVR4nO3deVhUdf//8dcAIriA+4KhmAsuuZQpuWXdWaZmmrl7C2q3Zmrl0qIlWpmalt6YpVY/NctMzLC60yw1bVFT07RS3NdMRCvBfWHO74/5zujI4rAMZ4Z5Pq5rLg5nzjnzPhwYXhw+530shmEYAgAAAHyUn9kFAAAAAGYiEAMAAMCnEYgBAADg0wjEAAAA8GkEYgAAAPg0AjEAAAB8GoEYAAAAPo1ADAAAAJ9GIAYAAIBPIxADuWSxWDR06FCzy8jSSy+9JIvFYnYZWbJYLHrppZfMLgPIlb59+yoiIsLsMrIUERGhhx56yOwyHPK6nkOHDslisej999+/6bLecLyQPwjEQCZ+++03denSRVWqVFFQUJAqVaqk+++/XzNmzDC7NNNZrVZ98MEHioqKUqlSpVS8eHHVrFlT0dHR+umnn8wuL53z58/rpZde0tq1a3O1HfsfFhk9Zs+e7VguPj5e//73v1WjRg1ZLBbdc8892XqdkydP6umnn1atWrUUHByscuXKqUmTJnr++ed19uzZXO0DCp6+fftm+n15/aNv375mlwp4rACzCwA80fr163XvvfeqcuXKGjBggCpUqKCjR4/qp59+0vTp0/Xkk0+aXaKpnnrqKb399tvq2LGjevfurYCAAO3evVtfffWVbr31Vt11111ml+jk/PnzevnllyUp2+E0I7NmzVKxYsWc5kVFRTk9v2XLFjVu3Fh//fVXtrb9999/684771Rqaqr69++vWrVq6a+//tKvv/6qWbNm6Yknnkj32vBtjz/+uFq3bu34/ODBgxo7dqwGDhyoli1bOuZXq1bNjPIAr0AgBjIwYcIEhYaGavPmzSpRooTTc8nJyeYU5SFOnDihmTNnasCAAXr33XednouLi9PJkydNqiz/dOnSRWXKlMn0+Q8//FCVKlWSn5+fbrvttmxte86cOTpy5IjWrVunZs2aOT2XmpqqwMDAHNWcE+fOnVPRokXz7fWQM02bNlXTpk0dn//8888aO3asmjZtqn//+995+lp8T6CgYsgEkIH9+/erbt266cKwJJUrVy7DdT777DPddtttKly4sOrWrasVK1Y4PX/48GENHjxYkZGRCg4OVunSpdW1a1cdOnTIabn3339fFotF33//vR5//HGVLl1aISEhio6O1j///JPudb/66iu1bNlSRYsWVfHixdW+fXvt2LEjy/1r1aqVGjRokOFzkZGRatOmTabrHjx4UIZhqHnz5umes1gs6b4+p0+f1rBhwxQeHq7ChQurevXqmjx5sqxWa5Y1StKxY8fUv39/lS9f3vF1nTt3brrlLl68qJdeekk1a9ZUUFCQKlasqM6dO2v//v06dOiQypYtK0l6+eWXHf8+to9XvnLlinbt2qXjx4/ftB5XhYeHy88vZ2+v+/fvl7+/f4Zn2UNCQhQUFOQ0b+PGjWrXrp1KliypokWLqn79+po+fbrTMt9++63je6REiRLq2LGjEhMTnZaxDwfZuXOnevXqpZIlS6pFixaO5xcsWKBGjRopODhYpUqVUo8ePXT06NEs92XJkiWyWCz67rvv0j33zjvvyGKx6Pfff5ckJSUlqV+/frrllltUuHBhVaxYUR07dkz383Gjvn37qlixYjpw4IDatGmjokWLKiwsTK+88ooMw8hy3aFDh6pYsWI6f/58uud69uypChUqKC0tTZL0+eefq3379goLC1PhwoVVrVo1jR8/3vF8ZtauXSuLxZJuuE5m41x37dqlLl26qFSpUgoKCtKdd96pL774IsvXyKkff/xRTZo0UVBQkG699VZ98MEHTs/b34u+++47DR48WOXKldMtt9zieN6V957sHNeb1SNJBw4cUNeuXVWqVCkVKVJEd911l5YtW+bS/trfo4OCgnTbbbdp6dKlLq0H30AgBjJQpUoVbdmyxfHL+mZ+/PFHDR48WD169NCUKVN08eJFPfroo07/Lt+8ebPWr1+vHj166M0339SgQYO0evVq3XPPPRn+Qh46dKgSExP10ksvKTo6Wh999JE6derk9Ev+ww8/VPv27VWsWDFNnjxZsbGx2rlzp1q0aJFlkOjTp49+/fXXdPu3efNm7dmzJ8uzSlWqVJEkffLJJxnWfb3z58+rVatWWrBggaKjo/Xmm2+qefPmGj16tEaMGJHluidOnNBdd92lVatWaejQoZo+fbqqV6+uxx57THFxcY7l0tLS9NBDD+nll19Wo0aNNHXqVD399NNKSUnR77//rrJly2rWrFmSpEceeUQffvihPvzwQ3Xu3FmSLXTXrl1bo0ePzrKe6/399986deqU45HRHyo5VaVKFaWlpenDDz+86bIrV67U3XffrZ07d+rpp5/W1KlTde+99+rLL790LLNq1Sq1adNGycnJeumllzRixAitX79ezZs3z/B7pGvXrjp//rwmTpyoAQMGSLL9xyQ6Olo1atTQtGnTNGzYMK1evVp33323Tp8+nWl99u/NxYsXp3suPj5edevWdZxBf/TRR7V06VL169dPM2fO1FNPPaUzZ87oyJEjN/06pKWl6cEHH1T58uU1ZcoUNWrUSOPGjdO4ceOyXK979+46d+5cukB1/vx5/e9//1OXLl3k7+8vyRYOixUrphEjRmj69Olq1KiRxo4dq1GjRt20Plft2LFDd911lxITEzVq1ChNnTpVRYsWVadOnfI8vO3bt09dunTR/fffr6lTp6pkyZLq27dvhn9MDx48WDt37nTaX1ffe1w9rq7Uc+LECTVr1kxff/21Bg8erAkTJujixYt6+OGHb/r1+eabb/Too4/KYrFo0qRJ6tSpk/r166eff/45F19FFCgGgHS++eYbw9/f3/D39zeaNm1qPPfcc8bXX39tXL58Od2ykozAwEBj3759jnnbt283JBkzZsxwzDt//ny6dTds2GBIMj744APHvHnz5hmSjEaNGjm93pQpUwxJxueff24YhmGcOXPGKFGihDFgwACnbSYlJRmhoaFO88eNG2dc/+N++vRpIygoyHj++eed1n3qqaeMokWLGmfPns3y6xMdHW1IMkqWLGk88sgjxhtvvGEkJiamW278+PFG0aJFjT179jjNHzVqlOHv728cOXLEMU+SMW7cOMfnjz32mFGxYkXj1KlTTuv26NHDCA0NdXw9586da0gypk2blu71rVarYRiGcfLkyXTbtzt48KAhyYiJiclynw3j2tfxxkeVKlUyXadu3bpGq1atbrptu6SkJKNs2bKGJKNWrVrGoEGDjIULFxqnT592Wu7q1atG1apVjSpVqhj//POP03P2/TYMw2jYsKFRrlw546+//nLM2759u+Hn52dER0en27eePXs6bevQoUOGv7+/MWHCBKf5v/32mxEQEJBu/o169uxplCtXzrh69apj3vHjxw0/Pz/jlVdeMQzDMP755x9DkvH6669nua2MxMTEGJKMJ5980jHParUa7du3NwIDA42TJ09muq7VajUqVapkPProo07zFy9ebEgyvv/+e8e8jH5+H3/8caNIkSLGxYsXneq5/vthzZo1hiRjzZo1Tuvav+/mzZvnmHffffcZ9erVc9qe1Wo1mjVrZtSoUSPT/bjR5s2b0237elWqVEm3f8nJyUbhwoWNkSNHOubZ34tatGjhdPxcfe9x9bi6Ws+wYcMMScYPP/zgVEvVqlWNiIgIIy0tzTCMjL+2DRs2NCpWrOj0c/TNN9/c9OcXvoMzxEAG7r//fm3YsEEPP/ywtm/frilTpqhNmzaqVKlShv++bN26tdMFK/Xr11dISIgOHDjgmBccHOyYvnLliv766y9Vr15dJUqU0NatW9Ntc+DAgSpUqJDj8yeeeEIBAQFavny5JNvZwdOnT6tnz55OZyv9/f0VFRWlNWvWZLp/oaGh6tixoz7++GPHGee0tDTFx8erU6dONx0jOG/ePL311luqWrWqli5dqmeeeUa1a9fWfffdp2PHjjmW++STT9SyZUuVLFnSqcbWrVsrLS1N33//fYbbNwxDn376qTp06CDDMJzWbdOmjVJSUhxfs08//VRlypTJ8EJHV1rNRUREyDAMl1o02X366adauXKl4/HRRx+5vO7NlC9fXtu3b9egQYP0zz//aPbs2erVq5fKlSun8ePHO47XL7/8ooMHD2rYsGHphvbY9/v48ePatm2b+vbtq1KlSjmer1+/vu6//37H99L1Bg0a5PR5QkKCrFarunXr5nQcKlSooBo1amT5fSbZzsImJyc7DRlYsmSJrFarunfvLsn2sxEYGKi1a9fm+Gz79a0P7a0QL1++rFWrVmW6jsViUdeuXbV8+XKn7h3x8fGqVKmS05CR639+z5w5o1OnTqlly5Y6f/68du3alaOar/f333/r22+/Vbdu3RzbP3XqlP766y+1adNGe/fudfrZyq06deo4XXBXtmxZRUZGOr1n2Q0YMMBxplxy/b0nO8fVlXqWL1+uJk2aOB2XYsWKaeDAgTp06JB27tyZ4bbtPwcxMTEKDQ11zL///vtVp06dLOuC7yAQA5lo3LixEhIS9M8//2jTpk0aPXq0zpw5oy5duqR7461cuXK69UuWLOn0S+DChQsaO3asYyxtmTJlVLZsWZ0+fVopKSnp1q9Ro4bT58WKFVPFihUd/47cu3evJOlf//qXypYt6/T45ptvbnrxX3R0tI4cOaIffvhBku1f6ydOnFCfPn1u+rXx8/PTkCFDtGXLFp06dUqff/652rZtq2+//VY9evRwLLd3716tWLEiXX32K+Izq/HkyZM6ffq03n333XTr9uvXz2nd/fv3KzIyUgEB+XeN8N13363WrVs7HhmNp86NihUratasWTp+/Lh2796tN998U2XLltXYsWM1Z84cSbb9lpTlRXuHDx+WZBsXfqPatWvr1KlTOnfunNP8qlWrOn2+d+9eGYahGjVqpDsWiYmJN/0+e/DBBxUaGqr4+HjHvPj4eDVs2FA1a9aUJBUuXFiTJ0/WV199pfLly+vuu+/WlClTlJSUlOW27fz8/HTrrbc6zbNv2/7zcvLkSSUlJTke9gDcvXt3XbhwwfGH7tmzZ7V8+XJ17drV6Q+qHTt26JFHHlFoaKhCQkJUtmxZx9CijH5+s2vfvn0yDEOxsbHpvs72oR95eUGvK+9Zdhl9T0g3f+/JznF1pZ7Dhw9n+r1sfz4j9vk3vqdKGf9swDfRZQK4icDAQDVu3FiNGzdWzZo11a9fP33yySdO4xOvP3tyPeO68b5PPvmk5s2bp2HDhqlp06YKDQ2VxWJRjx49XLrA7Eb2dT788ENVqFAh3fM3C4ht2rRR+fLltWDBAt19991asGCBKlSo4NS+yRWlS5fWww8/rIcfflj33HOPvvvuOx0+fFhVqlSR1WrV/fffr+eeey7Dde2hJbN9+/e//62YmJgMl6lfv3626vRGFotFNWvWVM2aNdW+fXvVqFFDH330kf7zn/+47TWvPxMq2Y6FxWLRV199leH3+c1awBUuXNgxBnbmzJk6ceKE1q1bp4kTJzotN2zYMHXo0EGfffaZvv76a8XGxmrSpEn69ttvdfvtt+d6vxo3buwUmMaNG6eXXnpJd911lyIiIrR48WL16tVL//vf/3ThwgXH2WvJdmFoq1atFBISoldeeUXVqlVTUFCQtm7dqueffz7Ln9/M/ktx48V49m0888wzmV7UWr16dZf392Zcec+yy+h7QnLtvcfV45qdegB3IBAD2XDnnXdKUo46EixZskQxMTGaOnWqY97FixczvShp7969uvfeex2fnz17VsePH1e7du0kXespWq5cuWyHWMn2C6hXr156//33NXnyZH322Wfp/jWaXXfeeae+++47HT9+XFWqVFG1atV09uzZbNdXtmxZFS9eXGlpaTddt1q1atq4caOuXLniNMTkep5+lz5X3HrrrSpZsqTje89+/H///fdMv0b2CyB3796d7rldu3apTJkyNx0eU61aNRmGoapVq2b6B8zNdO/eXfPnz9fq1auVmJgowzCcAuf1rzVy5EiNHDlSe/fuVcOGDTV16lQtWLAgy+1brVYdOHDAqb49e/ZIkuMuZB999JEuXLjgeP76M8rdunXT9OnTlZqaqvj4eEVERDh1+Vi7dq3++usvJSQk6O6773bMP3jw4E33vWTJkpKU7uf8xrOZ9noKFSqUo5/n/JTd956cHtcbValSJdPvZfvzma0nXTuzfb2MtgffxJAJIANr1qzJ8MyEfcxlTv7N5u/vn26bM2bMyLRt07vvvqsrV644Pp81a5auXr2qtm3bSrKd4Q0JCdHEiROdlrNzpR9wnz599M8//+jxxx/X2bNnXepZmpSUlOFYvcuXL2v16tXy8/NznMnq1q2bNmzYoK+//jrd8qdPn9bVq1czfA1/f389+uij+vTTTzPs9HH9vj366KM6deqU3nrrrXTL2b/eRYoUcbzmjdzRdi03Nm7cmG4YgyRt2rRJf/31l+N774477lDVqlUVFxeXbr/s+12xYkU1bNhQ8+fPd1rm999/1zfffOP44yornTt3lr+/v15++eV037+GYbh045HWrVurVKlSio+PV3x8vJo0aeL0b/jz58/r4sWLTutUq1ZNxYsX16VLl266fUlOx98wDL311lsqVKiQ7rvvPklS8+bNnYa5XB+Iu3fvrkuXLmn+/PlasWKFunXr5rRt+x+J1+//5cuXNXPmzJvWVaVKFfn7+6cbL3/juuXKldM999yjd955J8PvRU/q7+3qe09eHNfrtWvXTps2bdKGDRsc886dO6d3331XERERmY4Hvv7n4PrhLStXrsx03DF8D2eIgQw8+eSTOn/+vB555BHVqlVLly9f1vr16x1nj+zjWLPjoYce0ocffqjQ0FDVqVNHGzZs0KpVq1S6dOkMl798+bLuu+8+devWTbt379bMmTPVokULPfzww5JsPWlnzZqlPn366I477lCPHj1UtmxZHTlyRMuWLVPz5s0zDInXu/3223Xbbbfpk08+Ue3atXXHHXfcdD/++OMPNWnSRP/617903333qUKFCkpOTtbHH3+s7du3a9iwYY6bVjz77LP64osv9NBDD6lv375q1KiRzp07p99++01LlizRoUOHMr3BxWuvvaY1a9YoKipKAwYMUJ06dfT3339r69atWrVqlf7++29JtrHQH3zwgUaMGKFNmzapZcuWOnfunFatWqXBgwerY8eOCg4OVp06dRQfH6+aNWuqVKlSuu2223Tbbbc52q7FxMRk68K6rHz//feOAHTy5EmdO3dOr776qiTb+OPrzzLe6MMPP9RHH32kRx55RI0aNVJgYKASExM1d+5cBQUF6YUXXpBkGzc7a9YsdejQQQ0bNlS/fv1UsWJF7dq1Szt27HD8EfL666+rbdu2atq0qR577DFduHBBM2bMUGhoqKMXc1aqVaumV199VaNHj9ahQ4fUqVMnFS9eXAcPHtTSpUs1cOBAPfPMM1luo1ChQurcubMWLVqkc+fO6Y033nB6fs+ePY7v9Tp16iggIEBLly7ViRMnnMakZyYoKEgrVqxQTEyMoqKi9NVXX2nZsmV64YUXHD2os3LHHXeoevXqevHFF3Xp0qV0Z6+bNWumkiVLKiYmRk899ZQsFos+/PBDl/6dHxoaqq5du2rGjBmyWCyqVq2avvzyywzHA7/99ttq0aKF6tWrpwEDBujWW2/ViRMntGHDBv3xxx/avn37TV8vP7j63pPb43qjUaNG6eOPP1bbtm311FNPqVSpUpo/f74OHjyoTz/9NMve35MmTVL79u3VokUL9e/fX3///bdmzJihunXrcjt02ORrTwvAS3z11VdG//79jVq1ahnFihUzAgMDjerVqxtPPvmkceLECadlJRlDhgxJt40qVao4tfL6559/jH79+hllypQxihUrZrRp08bYtWtXuuXsrY6+++47Y+DAgUbJkiWNYsWKGb1793ZqnWW3Zs0ao02bNkZoaKgRFBRkVKtWzejbt6/x888/O5a5se3a9ezt3CZOnOjS1yY1NdWYPn260aZNG+OWW24xChUqZBQvXtxo2rSp8d577zm1/DIMW1uk0aNHG9WrVzcCAwONMmXKGM2aNTPeeOMNp7ZyyqAt2okTJ4whQ4YY4eHhRqFChYwKFSoY9913n/Huu+86LXf+/HnjxRdfNKpWrepYrkuXLsb+/fsdy6xfv95o1KiRERgY6PRaOWm7llUrr+uX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mbjnnns0dOhQDR06VKGhoSpTpoxiY2NlGEaGy6empio4OFhfffWV0/ylS5eqePHiOn/+vCTp+eefV82aNVWkSBHdeuutio2N1ZUrV7KsY9iwYU7zOnXqpL59+zo+v3Tpkp555hlVqlRJRYsWVVRUVKaBNjAwUBUqVHA8goODVbhwYad514faDz/8UBEREQoNDVWPHj105syZdF+jYcOGqUyZMmrTpo0k6ffff1fbtm1VrFgxlS9fXn369NGpU6cc6y1ZskT16tVTcHCwSpcurdatW+vcuXNOdb7xxhuqWLGiSpcurSFDhjh9jf755x9FR0erZMmSKlKkiNq2bau9e/dm+jWUpNdee03ly5dX8eLF9dhjj+nixYtZLg/AdxCIASAL8+fPV0BAgDZt2qTp06dr2rRp+n//7/9luGxISIgeeughLVy40Gn+Rx99pE6dOqlIkSKSpOLFi+v999/Xzp07NX36dL333nv673//m6s6hw4dqg0bNmjRokX69ddf1bVrVz344IM3DYk3s3//fn322Wf68ssv9eWXX+q7777Ta6+95rTM/PnzFRgYqHXr1mn27Nk6ffq0/vWvf+n222/Xzz//rBUrVujEiRPq1q2bJOn48ePq2bOn+vfvr8TERK1du1adO3d2+kNjzZo12r9/v9asWaP58+fr/fff1/vvv+94vm/fvvr555/1xRdfaMOGDTIMQ+3atcv0D4vFixfrpZde0sSJE/Xzzz+rYsWKmjlzZq6+NgAKEAMAkKFWrVoZtWvXNqxWq2Pe888/b9SuXTvTdZYuXWoUK1bMOHfunGEYhpGSkmIEBQUZX331VabrvP7660ajRo0cn48bN85o0KCBUx1PP/200zodO3Y0YmJiDMMwjMOHDxv+/v7GsWPHnJa57777jNGjR99sN42YmBijY8eO6eaPGzfOKFKkiJGamuqY9+yzzxpRUVFOtd1+++1O640fP9544IEHnOYdPXrUkGTs3r3b2LJliyHJOHToUKb1VKlSxbh69apjXteuXY3u3bsbhmEYe/bsMSQZ69atczx/6tQpIzg42Fi8eLFhGIYxb948IzQ01PF806ZNjcGDBzu9TlRUlNPXGYDv4gwxAGThrrvuksVicXzetGlT7d27V2lpaZo4caKKFSvmeBw5ckTt2rVToUKF9MUXX0iSPv30U4WEhKh169aObcTHx6t58+aqUKGCihUrpjFjxujIkSM5rvG3335TWlqaatas6VTPd999p/379+d85yVFRESoePHijs8rVqyo5ORkp2UaNWrk9Pn27du1Zs0ap1pq1aolyXbGuUGDBrrvvvtUr149de3aVe+9957++ecfp23UrVtX/v7+Gb5uYmKiAgICFBUV5Xi+dOnSioyMVGJiYob7kZiY6LS8ZDuWACBxUR0A5NigQYMcwwAkKSwsTAEBAerSpYsWLlyoHj16aOHCherevbsCAmxvtxs2bFDv3r318ssvq02bNgoNDdWiRYs0derUTF/Hz88v3bjl64cGnD17Vv7+/tqyZYtTiJSkYsWK5WofCxUq5PS5xWKR1Wp1mle0aFGnz8+ePasOHTpo8uTJ6bZXsWJF+fv7a+XKlVq/fr2++eYbzZgxQy+++KI2btyoqlWruvy6AJBXCMQAkIWNGzc6ff7TTz+pRo0a8vf3V6lSpVSqVKl06/Tu3Vv333+/duzYoW+//Vavvvqq47n169erSpUqevHFFx3zDh8+nGUNZcuWdeoKkZaWpt9//1333nuvJOn2229XWlqakpOT1bJlyxztZ16644479OmnnyoiIsLxh8CNLBaLmjdvrubNm2vs2LGqUqWKli5dqhEjRtx0+7Vr19bVq1e1ceNGNWvWTJL0119/affu3apTp06m62zcuFHR0dGOeT/99FMO9g5AQcSQCQDIwpEjRzRixAjt3r1bH3/8sWbMmKGnn346y3XuvvtuVahQQb1791bVqlWd/lVfo0YNHTlyRIsWLdL+/fv15ptvaunSpVlu71//+peWLVumZcuWadeuXXriiSd0+vRpx/M1a9ZU7969FR0drYSEBB08eFCbNm3SpEmTtGzZslztf04MGTJEf//9t3r27KnNmzdr//79+vrrr9WvXz+lpaVp48aNjovbjhw5ooSEBJ08eVK1a9d2afs1atRQx44dNWDAAP3444/avn27/v3vf6tSpUrq2LFjhus8/fTTmjt3rubNm6c9e/Zo3Lhx2rFjR17uNgAvRiAGgCxER0frwoULatKkiYYMGaKnn35aAwcOzHIdi8Winj17avv27erdu7fTcw8//LCGDx+uoUOHqmHDhlq/fr1iY2Oz3F7//v0VExOj6OhotWrVSrfeeqvj7LDdvHnzFB0drZEjRyoyMlKdOnXS5s2bVbly5ZzteC6EhYVp3bp1SktL0wMPPKB69epp2LBhKlGihPz8/BQSEqLvv/9e7dq1U82aNTVmzBhNnTpVbdu2dfk15s2bp0aNGumhhx5S06ZNZRiGli9fnm6ohV337t0VGxur5557To0aNdLhw4f1xBNP5NUuA/ByFuPGgWkAAEm2HrsNGzZUXFyc2aUAANyIM8QAAADwaQRiAAAA+DSGTAAAAMCncYYYAAAAPo1ADAAAAJ9GIAYAAIBPIxADAADApxGIAQAA4NMIxAAAAPBpBGIAAAD4NAIxAAAAfNr/B73B8LWbBb9vAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "from boruta import BorutaPy\n", "from sklearn.feature_selection import RFE\n", "from sklearn.metrics import accuracy_score, f1_score\n", "from sklearn.model_selection import train_test_split\n", "import xgboost as xgb\n", "import time\n", - "from tqdm import tqdm\n", "from shap_select import shap_select\n", "from skfeature.function.information_theoretical_based import MRMR\n", "from shap_selection import feature_selection\n", @@ -304,7 +1393,7 @@ " selected_idx = MRMR.mrmr(X_train.values, y_train.values, n_selected_features=num_features)\n", " return X_train.columns[selected_idx].tolist()\n", "\n", - "# Run experiments\n", + "# Run experiments with different feature selection methods and shap-select p-values\n", "def run_experiments():\n", " print(\"Loading dataset...\")\n", " df = pd.read_csv('creditcard.csv')\n", @@ -312,80 +1401,139 @@ " y = df['Class']\n", " X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=42)\n", "\n", - " # Shapely Select\n", - " xgb_model = train_xgboost(X_train, y_train)\n", + " results = []\n", + " shapely_select_results = []\n", + "\n", + " # No Feature Selection\n", + " print(\"\\n--- No Feature Selection ---\")\n", " start_time = time.time()\n", - " shap_features, _ = shap_select(xgb_model, X_val, y_val, task=\"binary\", alpha=1e-6, threshold=0.05, return_extended_data=True)\n", - " selected_shapely = shap_features[shap_features[\"selected\"] == 1][\"feature name\"].tolist()\n", - " shap_time = time.time() - start_time\n", - " print(f\"Shapely Select completed in {shap_time:.2f} seconds with {len(selected_shapely)} selected features.\")\n", - " \n", - " xgb_model_shap = train_xgboost(X_train[selected_shapely], y_train)\n", - " y_pred_shap = predict_xgboost(xgb_model_shap, X_val[selected_shapely])\n", - " shap_accuracy = accuracy_score(y_val, y_pred_shap)\n", - " shap_f1 = f1_score(y_val, y_pred_shap)\n", + " xgb_model = train_xgboost(X_train, y_train)\n", + " y_pred = predict_xgboost(xgb_model, X_val)\n", + " runtime = time.time() - start_time\n", + " print(f\"No Feature Selection completed in {runtime:.2f} seconds with {len(X_train.columns)} features.\")\n", + " results.append({\n", + " 'Method': 'No Feature Selection',\n", + " 'Selected Features': len(X_train.columns),\n", + " 'Accuracy': accuracy_score(y_val, y_pred),\n", + " 'F1 Score': f1_score(y_val, y_pred),\n", + " 'Runtime (s)': runtime\n", + " })\n", + "\n", + " # Shapely Select with different p-values\n", + " for p_value in [0.01, 0.02, 0.03, 0.04, 0.05, 0.07, 0.1]:\n", + " print(f\"\\n--- Shapely Select with p-value={p_value} ---\")\n", + " start_time = time.time()\n", + " shap_features, _ = shap_select(xgb_model, X_val, y_val, task=\"binary\", alpha=1e-6, threshold=p_value, return_extended_data=True)\n", + " selected_features = shap_features[shap_features[\"selected\"] == 1][\"feature name\"].tolist()\n", + " runtime = time.time() - start_time\n", + " print(f\"Shapely Select with p-value {p_value} completed in {runtime:.2f} seconds with {len(selected_features)} selected features: {selected_features}\")\n", + "\n", + " xgb_model_shap = train_xgboost(X_train[selected_features], y_train)\n", + " y_pred_shap = predict_xgboost(xgb_model_shap, X_val[selected_features])\n", + "\n", + " f1_score_shap = f1_score(y_val, y_pred_shap)\n", + " shapely_select_results.append({'p_value': p_value, 'F1 Score': f1_score_shap})\n", + "\n", + " results.append({\n", + " 'Method': f'Shapely Select (p={int(p_value*100)}%)',\n", + " 'Selected Features': len(selected_features),\n", + " 'Accuracy': accuracy_score(y_val, y_pred_shap),\n", + " 'F1 Score': f1_score_shap,\n", + " 'Runtime (s)': runtime\n", + " })\n", + "\n", + " # Plot F1 Score vs p-value for Shapely Select\n", + " plt.figure(figsize=(8, 6))\n", + " p_values = [entry['p_value'] for entry in shapely_select_results]\n", + " f1_scores = [entry['F1 Score'] for entry in shapely_select_results]\n", + " plt.scatter(p_values, f1_scores, color='blue')\n", + " plt.plot(p_values, f1_scores, linestyle='-', color='blue')\n", + " plt.xlabel(\"p-value Threshold\")\n", + " plt.ylabel(\"F1 Score\")\n", + " plt.title(\"Shapely Select: F1 Score vs p-value Threshold\")\n", + " plt.savefig(\"shapely_select_p_value_benchmark.png\")\n", + " print(\"Saved plot for Shapely Select p-value benchmarking.\")\n", "\n", " # SHAP Selection\n", + " print(\"\\n--- SHAP Selection ---\")\n", " start_time = time.time()\n", " selected_shap_selection, _ = feature_selection.shap_select(xgb_model, X_train, X_val, X_train.columns, agnostic=False)\n", " selected_shap_selection = selected_shap_selection[:15]\n", " shap_selection_time = time.time() - start_time\n", - " print(f\"SHAP Selection completed in {shap_selection_time:.2f} seconds with {len(selected_shap_selection)} selected features.\")\n", - " \n", + " print(f\"SHAP Selection completed in {shap_selection_time:.2f} seconds with {len(selected_shap_selection)} selected features: {selected_shap_selection}\")\n", + "\n", " xgb_model_shap_selection = train_xgboost(X_train[selected_shap_selection], y_train)\n", " y_pred_shap_selection = predict_xgboost(xgb_model_shap_selection, X_val[selected_shap_selection])\n", - " shap_selection_accuracy = accuracy_score(y_val, y_pred_shap_selection)\n", - " shap_selection_f1 = f1_score(y_val, y_pred_shap_selection)\n", + "\n", + " results.append({\n", + " 'Method': 'SHAP Selection',\n", + " 'Selected Features': len(selected_shap_selection),\n", + " 'Accuracy': accuracy_score(y_val, y_pred_shap_selection),\n", + " 'F1 Score': f1_score(y_val, y_pred_shap_selection),\n", + " 'Runtime (s)': shap_selection_time\n", + " })\n", "\n", " # RFE\n", + " print(\"\\n--- RFE ---\")\n", " rfe_start_time = time.time()\n", " rfe = RFE(xgb.XGBClassifier(use_label_encoder=False), n_features_to_select=15)\n", " rfe.fit(X_train, y_train)\n", " selected_rfe = X_train.columns[rfe.support_]\n", " rfe_time = time.time() - rfe_start_time\n", - " print(f\"RFE completed in {rfe_time:.2f} seconds with {len(selected_rfe)} selected features.\")\n", - " \n", + " print(f\"RFE completed in {rfe_time:.2f} seconds with {len(selected_rfe)} selected features: {selected_rfe}\")\n", + "\n", " xgb_model_rfe = train_xgboost(X_train[selected_rfe], y_train)\n", " y_pred_rfe = predict_xgboost(xgb_model_rfe, X_val[selected_rfe])\n", - " rfe_accuracy = accuracy_score(y_val, y_pred_rfe)\n", - " rfe_f1 = f1_score(y_val, y_pred_rfe)\n", + "\n", + " results.append({\n", + " 'Method': 'RFE',\n", + " 'Selected Features': len(selected_rfe),\n", + " 'Accuracy': accuracy_score(y_val, y_pred_rfe),\n", + " 'F1 Score': f1_score(y_val, y_pred_rfe),\n", + " 'Runtime (s)': rfe_time\n", + " })\n", "\n", " # HISEL\n", + " print(\"\\n--- HISEL ---\")\n", " hisel_start_time = time.time()\n", " selected_hisel = hisel_feature_selection(X_train, y_train, num_features=15)\n", " hisel_time = time.time() - hisel_start_time\n", - " print(f\"HISEL selection completed in {hisel_time:.2f} seconds with {len(selected_hisel)} selected features.\")\n", - " \n", + " print(f\"HISEL completed in {hisel_time:.2f} seconds with {len(selected_hisel)} selected features: {selected_hisel}\")\n", + "\n", " xgb_model_hisel = train_xgboost(X_train[selected_hisel], y_train)\n", " y_pred_hisel = predict_xgboost(xgb_model_hisel, X_val[selected_hisel])\n", - " hisel_accuracy = accuracy_score(y_val, y_pred_hisel)\n", - " hisel_f1 = f1_score(y_val, y_pred_hisel)\n", + "\n", + " results.append({\n", + " 'Method': 'HISEL',\n", + " 'Selected Features': len(selected_hisel),\n", + " 'Accuracy': accuracy_score(y_val, y_pred_hisel),\n", + " 'F1 Score': f1_score(y_val, y_pred_hisel),\n", + " 'Runtime (s)': hisel_time\n", + " })\n", "\n", " # Boruta\n", + " print(\"\\n--- Boruta ---\")\n", " boruta_start_time = time.time()\n", " rf_model = xgb.XGBClassifier(use_label_encoder=False)\n", " boruta_selector = BorutaPy(rf_model, n_estimators='auto', random_state=1)\n", " boruta_selector.fit(X_train.values, y_train.values)\n", " selected_boruta = X_train.columns[boruta_selector.support_].tolist()\n", " boruta_time = time.time() - boruta_start_time\n", - " print(f\"Boruta completed in {boruta_time:.2f} seconds with {len(selected_boruta)} selected features.\")\n", - " \n", + " print(f\"Boruta completed in {boruta_time:.2f} seconds with {len(selected_boruta)} selected features: {selected_boruta}\")\n", + "\n", " xgb_model_boruta = train_xgboost(X_train[selected_boruta], y_train)\n", " y_pred_boruta = predict_xgboost(xgb_model_boruta, X_val[selected_boruta])\n", - " boruta_accuracy = accuracy_score(y_val, y_pred_boruta)\n", - " boruta_f1 = f1_score(y_val, y_pred_boruta)\n", "\n", - " # Results Summary\n", - " results = {\n", - " 'Method': ['Shapely Select', 'SHAP Selection', 'RFE', 'HISEL', 'Boruta'],\n", - " 'Selected Features': [len(selected_shapely), len(selected_shap_selection), len(selected_rfe), len(selected_hisel), len(selected_boruta)],\n", - " 'Accuracy': [shap_accuracy, shap_selection_accuracy, rfe_accuracy, hisel_accuracy, boruta_accuracy],\n", - " 'F1 Score': [shap_f1, shap_selection_f1, rfe_f1, hisel_f1, boruta_f1],\n", - " 'Runtime (s)': [shap_time, shap_selection_time, rfe_time, hisel_time, boruta_time]\n", - " }\n", + " results.append({\n", + " 'Method': 'Boruta',\n", + " 'Selected Features': len(selected_boruta),\n", + " 'Accuracy': accuracy_score(y_val, y_pred_boruta),\n", + " 'F1 Score': f1_score(y_val, y_pred_boruta),\n", + " 'Runtime (s)': boruta_time\n", + " })\n", "\n", " results_df = pd.DataFrame(results)\n", - " print(\"Experiment results:\")\n", + " print(\"\\n--- Experiment Results ---\")\n", " print(results_df)\n", " return results_df\n", "\n", diff --git a/docs/shapely_select_paper_experiment_without_benchmark.ipynb b/docs/shapely_select_paper_experiment_without_benchmark.ipynb new file mode 100644 index 0000000..132c119 --- /dev/null +++ b/docs/shapely_select_paper_experiment_without_benchmark.ipynb @@ -0,0 +1,746 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading dataset...\n", + "\n", + "--- No Feature Selection ---\n", + "No Feature Selection completed in 0.67 seconds with 30 features.\n", + "\n", + "--- Shapely Select with p-value=0.01 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.01 completed in 41.28 seconds with 6 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26']\n", + "\n", + "--- Shapely Select with p-value=0.02 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 7 out of 7 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 6 out of 6 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 5 out of 5 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 4 out of 4 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 3 out of 3 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 2 out of 2 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shapely Select with p-value 0.02 completed in 29.96 seconds with 6 selected features: ['V14', 'V17', 'V4', 'V8', 'V10', 'V26']\n", + "\n", + "--- Shapely Select with p-value=0.03 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 31 out of 31 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 30 out of 30 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 29 out of 29 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 28 out of 28 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 27 out of 27 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 26 out of 26 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 25 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 24 out of 24 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 23 out of 23 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 22 out of 22 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 21 out of 21 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 20 out of 20 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 19 out of 19 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 18 out of 18 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 17 out of 17 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 16 out of 16 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 15 out of 15 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 14 out of 14 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 13 out of 13 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 12 out of 12 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 11 out of 11 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 10 out of 10 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 9 out of 9 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:71: ConvergenceWarning: QC check did not pass for 8 out of 8 parameters\n", + "Try increasing solver accuracy or number of iterations, decreasing alpha, or switch solvers\n", + " warnings.warn(message, ConvergenceWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/statsmodels/base/l1_solvers_common.py:144: ConvergenceWarning: Could not trim params automatically due to failed QC check. Trimming using trim_mode == 'size' will still work.\n", + " warnings.warn(msg, ConvergenceWarning)\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from boruta import BorutaPy\n", + "from sklearn.feature_selection import RFE\n", + "from sklearn.metrics import accuracy_score, f1_score\n", + "from sklearn.model_selection import train_test_split\n", + "import xgboost as xgb\n", + "import time\n", + "from shap_select import shap_select\n", + "from skfeature.function.information_theoretical_based import MRMR\n", + "from shap_selection import feature_selection\n", + "\n", + "# Define common XGBoost model\n", + "def train_xgboost(X_train, y_train):\n", + " params = {\"objective\": \"binary:logistic\", \"eval_metric\": \"logloss\", \"verbosity\": 0}\n", + " dtrain = xgb.DMatrix(X_train, label=y_train)\n", + " xgb_model = xgb.train(params, dtrain, num_boost_round=100)\n", + " return xgb_model\n", + "\n", + "def predict_xgboost(xgb_model, X_val):\n", + " dval = xgb.DMatrix(X_val)\n", + " y_pred = (xgb_model.predict(dval) > 0.5).astype(int)\n", + " return y_pred\n", + "\n", + "# HISEL feature selection using MRMR\n", + "def hisel_feature_selection(X_train, y_train, num_features):\n", + " selected_idx = MRMR.mrmr(X_train.values, y_train.values, n_selected_features=num_features)\n", + " return X_train.columns[selected_idx].tolist()\n", + "\n", + "# Run experiments\n", + "def run_experiments():\n", + " print(\"Loading dataset...\")\n", + " df = pd.read_csv('creditcard.csv')\n", + " X = df.drop(columns=['Class'])\n", + " y = df['Class']\n", + " X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=42)\n", + "\n", + " # No Feature Selection\n", + " print(\"\\n--- No Feature Selection ---\")\n", + " start_time = time.time()\n", + " xgb_model = train_xgboost(X_train, y_train)\n", + " y_pred = predict_xgboost(xgb_model, X_val)\n", + " no_fs_time = time.time() - start_time\n", + " no_fs_accuracy = accuracy_score(y_val, y_pred)\n", + " no_fs_f1 = f1_score(y_val, y_pred)\n", + " print(f\"No Feature Selection completed in {no_fs_time:.2f} seconds with {len(X_train.columns)} features.\")\n", + "\n", + " # Shapely Select\n", + " print(\"\\n--- Shapely Select ---\")\n", + " start_time = time.time()\n", + " shap_features, _ = shap_select(xgb_model, X_val, y_val, task=\"binary\", alpha=1e-6, threshold=0.05, return_extended_data=True)\n", + " selected_shapely = shap_features[shap_features[\"selected\"] == 1][\"feature name\"].tolist()\n", + " shap_time = time.time() - start_time\n", + " print(f\"Shapely Select completed in {shap_time:.2f} seconds with {len(selected_shapely)} selected features.\")\n", + " \n", + " xgb_model_shap = train_xgboost(X_train[selected_shapely], y_train)\n", + " y_pred_shap = predict_xgboost(xgb_model_shap, X_val[selected_shapely])\n", + " shap_accuracy = accuracy_score(y_val, y_pred_shap)\n", + " shap_f1 = f1_score(y_val, y_pred_shap)\n", + "\n", + " # SHAP Selection\n", + " print(\"\\n--- SHAP Selection ---\")\n", + " start_time = time.time()\n", + " selected_shap_selection, _ = feature_selection.shap_select(xgb_model, X_train, X_val, X_train.columns, agnostic=False)\n", + " selected_shap_selection = selected_shap_selection[:15]\n", + " shap_selection_time = time.time() - start_time\n", + " print(f\"SHAP Selection completed in {shap_selection_time:.2f} seconds with {len(selected_shap_selection)} selected features.\")\n", + " \n", + " xgb_model_shap_selection = train_xgboost(X_train[selected_shap_selection], y_train)\n", + " y_pred_shap_selection = predict_xgboost(xgb_model_shap_selection, X_val[selected_shap_selection])\n", + " shap_selection_accuracy = accuracy_score(y_val, y_pred_shap_selection)\n", + " shap_selection_f1 = f1_score(y_val, y_pred_shap_selection)\n", + "\n", + " # RFE\n", + " print(\"\\n--- RFE ---\")\n", + " rfe_start_time = time.time()\n", + " rfe = RFE(xgb.XGBClassifier(use_label_encoder=False), n_features_to_select=15)\n", + " rfe.fit(X_train, y_train)\n", + " selected_rfe = X_train.columns[rfe.support_]\n", + " rfe_time = time.time() - rfe_start_time\n", + " print(f\"RFE completed in {rfe_time:.2f} seconds with {len(selected_rfe)} selected features.\")\n", + " \n", + " xgb_model_rfe = train_xgboost(X_train[selected_rfe], y_train)\n", + " y_pred_rfe = predict_xgboost(xgb_model_rfe, X_val[selected_rfe])\n", + " rfe_accuracy = accuracy_score(y_val, y_pred_rfe)\n", + " rfe_f1 = f1_score(y_val, y_pred_rfe)\n", + "\n", + " # HISEL\n", + " print(\"\\n--- HISEL ---\")\n", + " hisel_start_time = time.time()\n", + " selected_hisel = hisel_feature_selection(X_train, y_train, num_features=15)\n", + " hisel_time = time.time() - hisel_start_time\n", + " print(f\"HISEL completed in {hisel_time:.2f} seconds with {len(selected_hisel)} selected features.\")\n", + " \n", + " xgb_model_hisel = train_xgboost(X_train[selected_hisel], y_train)\n", + " y_pred_hisel = predict_xgboost(xgb_model_hisel, X_val[selected_hisel])\n", + " hisel_accuracy = accuracy_score(y_val, y_pred_hisel)\n", + " hisel_f1 = f1_score(y_val, y_pred_hisel)\n", + "\n", + " # Boruta\n", + " print(\"\\n--- Boruta ---\")\n", + " boruta_start_time = time.time()\n", + " rf_model = xgb.XGBClassifier(use_label_encoder=False)\n", + " boruta_selector = BorutaPy(rf_model, n_estimators='auto', random_state=1)\n", + " boruta_selector.fit(X_train.values, y_train.values)\n", + " selected_boruta = X_train.columns[boruta_selector.support_].tolist()\n", + " boruta_time = time.time() - boruta_start_time\n", + " print(f\"Boruta completed in {boruta_time:.2f} seconds with {len(selected_boruta)} selected features.\")\n", + " \n", + " xgb_model_boruta = train_xgboost(X_train[selected_boruta], y_train)\n", + " y_pred_boruta = predict_xgboost(xgb_model_boruta, X_val[selected_boruta])\n", + " boruta_accuracy = accuracy_score(y_val, y_pred_boruta)\n", + " boruta_f1 = f1_score(y_val, y_pred_boruta)\n", + "\n", + " # Results Summary\n", + " results = {\n", + " 'Method': [\n", + " 'No Feature Selection', 'Shapely Select', 'SHAP Selection', \n", + " 'RFE', 'HISEL', 'Boruta'\n", + " ],\n", + " 'Selected Features': [\n", + " len(X_train.columns), len(selected_shapely), len(selected_shap_selection), \n", + " len(selected_rfe), len(selected_hisel), len(selected_boruta)\n", + " ],\n", + " 'Accuracy': [\n", + " no_fs_accuracy, shap_accuracy, shap_selection_accuracy, \n", + " rfe_accuracy, hisel_accuracy, boruta_accuracy\n", + " ],\n", + " 'F1 Score': [\n", + " no_fs_f1, shap_f1, shap_selection_f1, \n", + " rfe_f1, hisel_f1, boruta_f1\n", + " ],\n", + " 'Runtime (s)': [\n", + " no_fs_time, shap_time, shap_selection_time, \n", + " rfe_time, hisel_time, boruta_time\n", + " ]\n", + " }\n", + "\n", + " results_df = pd.DataFrame(results)\n", + " print(\"\\n--- Experiment Results ---\")\n", + " print(results_df)\n", + " return results_df\n", + "\n", + "# Run the experiments\n", + "run_experiments()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting shap-select==0.1.0\n", + " Downloading shap-select-0.1.0.tar.gz (11 kB)\n", + " Installing build dependencies ... \u001b[?25ldone\n", + "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", + "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25hRequirement already satisfied: pandas in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-select==0.1.0) (2.2.3)\n", + "Requirement already satisfied: scipy>=1.8.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-select==0.1.0) (1.14.1)\n", + "Requirement already satisfied: shap in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-select==0.1.0) (0.46.0)\n", + "Requirement already satisfied: statsmodels in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-select==0.1.0) (0.14.3)\n", + "Requirement already satisfied: numpy<2.3,>=1.23.5 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from scipy>=1.8.0->shap-select==0.1.0) (1.26.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from pandas->shap-select==0.1.0) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pandas->shap-select==0.1.0) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pandas->shap-select==0.1.0) (2024.2)\n", + "Requirement already satisfied: scikit-learn in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-select==0.1.0) (1.5.2)\n", + "Requirement already satisfied: tqdm>=4.27.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-select==0.1.0) (4.66.5)\n", + "Requirement already satisfied: packaging>20.9 in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from shap->shap-select==0.1.0) (24.1)\n", + "Requirement already satisfied: slicer==0.0.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-select==0.1.0) (0.0.8)\n", + "Requirement already satisfied: numba in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-select==0.1.0) (0.60.0)\n", + "Requirement already satisfied: cloudpickle in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-select==0.1.0) (3.0.0)\n", + "Requirement already satisfied: patsy>=0.5.6 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from statsmodels->shap-select==0.1.0) (0.5.6)\n", + "Requirement already satisfied: six in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from patsy>=0.5.6->statsmodels->shap-select==0.1.0) (1.16.0)\n", + "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from numba->shap->shap-select==0.1.0) (0.43.0)\n", + "Requirement already satisfied: joblib>=1.2.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from scikit-learn->shap->shap-select==0.1.0) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from scikit-learn->shap->shap-select==0.1.0) (3.5.0)\n", + "Building wheels for collected packages: shap-select\n", + " Building wheel for shap-select (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for shap-select: filename=shap_select-0.1.0-py3-none-any.whl size=10499 sha256=1d879e1b717c1c63c7c95bb7a605965618199e393a4291bc6f841172e9923bb4\n", + " Stored in directory: /Users/baran.koseoglu/Library/Caches/pip/wheels/db/8e/89/b9036b114c0d8320ba07cd4296d266bf8f81fd8bd8b3d21d23\n", + "Successfully built shap-select\n", + "Installing collected packages: shap-select\n", + "Successfully installed shap-select-0.1.0\n" + ] + } + ], + "source": [ + "!pip3 install shap-select==0.1.0" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting shap-selection\n", + " Downloading shap_selection-0.1.6-py3-none-any.whl.metadata (2.7 kB)\n", + "Requirement already satisfied: shap in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-selection) (0.46.0)\n", + "Requirement already satisfied: numpy in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap-selection) (1.26.4)\n", + "Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (1.14.1)\n", + "Requirement already satisfied: scikit-learn in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (1.5.2)\n", + "Requirement already satisfied: pandas in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (2.2.3)\n", + "Requirement already satisfied: tqdm>=4.27.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (4.66.5)\n", + "Requirement already satisfied: packaging>20.9 in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from shap->shap-selection) (24.1)\n", + "Requirement already satisfied: slicer==0.0.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (0.0.8)\n", + "Requirement already satisfied: numba in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (0.60.0)\n", + "Requirement already satisfied: cloudpickle in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from shap->shap-selection) (3.0.0)\n", + "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from numba->shap->shap-selection) (0.43.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from pandas->shap->shap-selection) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pandas->shap->shap-selection) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pandas->shap->shap-selection) (2024.2)\n", + "Requirement already satisfied: joblib>=1.2.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from scikit-learn->shap->shap-selection) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from scikit-learn->shap->shap-selection) (3.5.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/baran.koseoglu/Library/Python/3.12/lib/python/site-packages (from python-dateutil>=2.8.2->pandas->shap->shap-selection) (1.16.0)\n", + "Downloading shap_selection-0.1.6-py3-none-any.whl (4.1 kB)\n", + "Installing collected packages: shap-selection\n", + "Successfully installed shap-selection-0.1.6\n" + ] + } + ], + "source": [ + "!pip3 install shap-selection\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}