From af6000fcd55bce7da29d764292f394d4ecffe135 Mon Sep 17 00:00:00 2001 From: sborms Date: Mon, 4 Oct 2021 11:28:18 +0200 Subject: [PATCH] update docs params & HTML generation --- README.rst | 11 +- docs/Makefile | 1 - docs/source/conf.py | 16 +-- docs/source/images/cobra_Icon.png | Bin 31674 -> 0 bytes docs/source/index.rst | 21 +-- docs/source/tutorial_outdated.rst | 224 ------------------------------ setup.py | 2 +- 7 files changed, 17 insertions(+), 258 deletions(-) delete mode 100644 docs/source/images/cobra_Icon.png delete mode 100644 docs/source/tutorial_outdated.rst diff --git a/README.rst b/README.rst index a615245..e7c2898 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,6 @@ .. image:: https://github.com/PythonPredictions/cobra/raw/master/material/logo.png - :width: 350 - + :width: 700 .. image:: https://img.shields.io/pypi/v/pythonpredictions-cobra.svg :target: https://pypi.org/project/pythonpredictions-cobra/ @@ -54,7 +53,7 @@ The easiest way to install Cobra is using ``pip``: :: Documentation and extra material -===================== +================================ - A `blog post `_ on the overall methodology. @@ -64,7 +63,7 @@ Documentation and extra material - A step-by-step `tutorial `_ for **logistic regression**. -- A step-by-step `tutorial `_ for **linear regression**. +- A step-by-step `tutorial `__ for **linear regression**. - Check out the Data Science Leuven Meetup `talk `_ by one of the core developers (second presentation). His `slides `_ and `related material `_ are also available. @@ -72,6 +71,6 @@ Contributing to Cobra ===================== We'd love you to contribute to the development of Cobra! There are many ways in which you can contribute, the most common of which is to contribute to the source code or documentation of the project. However, there are many other ways you can contribute (report issues, improve code coverage by adding unit tests, ...). -We use GitHub issue to track all bugs and feature requests. Feel free to open an issue in case you found a bug or in case you wish to see a new feature added. +We use GitHub issues to track all bugs and feature requests. Feel free to open an issue in case you found a bug or in case you wish to see a new feature added. -For more details, check our `wiki `_. +For more details, check out our `wiki `_. diff --git a/docs/Makefile b/docs/Makefile index d0c3cbf..92f501f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,5 +1,4 @@ # Minimal makefile for Sphinx documentation -# # You can set these variables from the command line, and also # from the environment for the first two. diff --git a/docs/source/conf.py b/docs/source/conf.py index 449fd5a..64d3d6f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,5 +1,5 @@ # Configuration file for the Sphinx documentation builder. -# + # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html @@ -14,16 +14,14 @@ import sys sys.path.insert(0, os.path.abspath('../../')) - # -- Project information ----------------------------------------------------- -project = 'cobra' -copyright = '2020, Python Predictions' +project = 'Cobra' +copyright = '2021, Python Predictions' author = 'Python Predictions' # The full version, including alpha/beta/rc tags -release = '1.0.0' - +release = '1.1.0' # -- General configuration --------------------------------------------------- @@ -72,12 +70,12 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# + html_theme = 'sphinx_rtd_theme' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +# html_static_path = ['_static'] # uncomment if exists, currently doesn't -html_favicon = 'images/cobra_icon.png' +html_favicon = 'images/cobra-icon2.png' diff --git a/docs/source/images/cobra_Icon.png b/docs/source/images/cobra_Icon.png deleted file mode 100644 index d915c5c1a04dda1ee49c7f8a04bca73ff6a833df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31674 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 diff --git a/docs/source/index.rst b/docs/source/index.rst index a887301..69b1fb1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,30 +1,17 @@ -.. cobra documentation master file, created by +.. Cobra documentation master file, created by sphinx-quickstart on Thu Dec 3 11:55:07 2020. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. ********************************* -Welcome to cobra's documentation! +Welcome to Cobra's documentation! ********************************* -.. include:: C:/Users/hendrik.dewinter/PycharmProjects/cobra/README.rst - -.. toctree:: - :maxdepth: 2 - :hidden: - :caption: Contents: +.. include:: ../../README.rst .. toctree:: :maxdepth: 4 :hidden: :caption: API Reference - C:/Users/hendrik.dewinter/PycharmProjects/cobra/docs/source/docstring/modules.rst - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` + docstring/modules diff --git a/docs/source/tutorial_outdated.rst b/docs/source/tutorial_outdated.rst deleted file mode 100644 index fd95b83..0000000 --- a/docs/source/tutorial_outdated.rst +++ /dev/null @@ -1,224 +0,0 @@ -Tutorial -======== - -This section we will walk you through all the required steps to build a predictive model using cobra. All classes and functions used here are well-documented. In case you want more information on a class or function, simply read the corresponding parts in the documentation or run the following python snippet from e.g. a notebook: - -.. code-block:: python - - help(function_or_class_you_want_info_from) - -Building a good model involves three steps - - - preprocessing: properly prepare the predictors (a synonym for "feature" or variable that we use throughout this tutorial) for modelling. - - feature selection: automatically select a subset of predictors which contribute most to the target variable or output in which you are interested. - - model evaluation: once a model has been build, a detailed evaluation can be performed by computing all sorts of evaluation metrics. - -In the examples below, we assume the data for model building is available in a pandas DataFrame called ``basetable``. This DataFrame should at least contain an ID column (e.g. "customernumber"), a target column (e.g. "TARGET") and a number of candidate predictors (features) to build a model with. - -Preprocessing -------------- - -The first part focusses on preparing the predictors for modelling by: - -- Splitting the dataset into training, selection and validation datasets. -- binning continuous variables into discrete intervals -- Replacing missing values of both categorical and continuous variables (which are now binned) with an additional "Missing" bin/category -- Regrouping categories in new category "other" -- Replacing bins/categories with their corresponding incidence rate per category/bin. - -This will be taken care of by the ``PreProcessor`` class, which has a scikit-learn like interface (i.e. ``fit`` & ``transform``) - -.. code-block:: python - - import json - from cobra.preprocessing import PreProcessor - - # Prepare data - # create instance of PreProcessor from parameters - # There are many options possible, see API reference, but here - # we will use all the defaults - preprocessor = PreProcessor.from_params() - - # split data into train-selection-validation set - # in the result, an additional column "split" will be created - # containing each of those values - basetable = preprocessor.train_selection_validation_split( - basetable, - train_prop=0.6, selection_prop=0.2, - validation_prop=0.2) - - # create list containing the column names of the discrete resp. - # continuous variables - continuous_vars = [] - discrete_vars = [] - - # fit the pipeline - preprocessor.fit(basetable[basetable["split"]=="train"], - continuous_vars=continuous_vars, - discrete_vars=discrete_vars, - target_column_name=target_column_name) - - # store fitted preprocessing pipeline as a JSON file - pipeline = preprocessor.serialize_pipeline() - - # I/O outside of PreProcessor to allow flexibility (e.g. upload to S3, ...) - path = "path/to/store/preprocessing/pipeline/as/json/file/for/later/re-use.json" - with open(path, "w") as file: - json.dump(pipeline, file) - - # transform the data (e.g. perform discretisation, incidence replacement, ...) - basetable = preprocessor.transform(basetable, - continuous_vars=continuous_vars, - discrete_vars=discrete_vars) - - # When you want to reuse the pipeline the next time, simply load it back in again - # using the following snippet: - # with open(path, "r") as file: - # pipeline = json.load(file) - # preprocessor = PreProcessor.from_pipeline(pipeline) and you're good to go! - -Feature selection ------------------ - -Once the predictors are properly prepared, we can start building a predictive model, which boils down to selecting the right predictors from the dataset to train a model on. As a dataset typically contains many predictors, we can first perform a univariate preselection to rule out any predictor with little to no predictive power. - -This preselection is based on an AUC threshold of a univariate model on the train and selection datasets. As the AUC just calculates the quality of a ranking, all monotonous transformations of a given ranking (i.e. transformations that do not alter the ranking itself) will lead to the same AUC. Hence, pushing a categorical variable (incl. a binned continuous variable) through a logistic regression will produce exactly the same ranking as using target encoding, as it will produce the exact same output: a ranking of the categories on the training/selection set. Therefore, no univariate model is trained here as the target encoded train and selection data is used as predicted scores to compute the AUC with against the target. - -.. code-block:: python - - from cobra.model_building import univariate_selection - from cobra.evaluation import plot_univariate_predictor_quality - from cobra.evaluation import plot_correlation_matrix - - # Get list of predictor names to use for univariate_selection - preprocessed_predictors = [col for col in basetable.columns if col.endswith("_enc")] - - # perform univariate selection on preprocessed predictors: - df_auc = univariate_selection.compute_univariate_preselection( - target_enc_train_data=basetable[basetable["split"] == "train"], - target_enc_selection_data=basetable[basetable["split"] == "selection"], - predictors=preprocessed_predictors, - target_column=target_column_name, - preselect_auc_threshold=0.53, # if auc_selection <= 0.53 exclude predictor - preselect_overtrain_threshold=0.05 # if (auc_train - auc_selection) >= 0.05 --> overfitting! - ) - - # Plot df_auc to get a horizontal barplot: - plot_univariate_predictor_quality(df_auc) - - # compute correlations between preprocessed predictors: - df_corr = (univariate_selection - .compute_correlations(basetable[basetable["split"] == "train"], - preprocessed_predictors)) - - # plot correlation matrix - plot_correlation_matrix(df_corr) - - # get a list of predictors selection by the univariate selection - preselected_predictors = (univariate_selection - .get_preselected_predictors(df_auc)) - -After an initial preselection on the predictors, we can start building the model itself using forward feature selection to choose the right set of predictors. Since we use target encoding on all our predictors, we will only consider models with positive coefficients (no sign flip should occur) as this makes the model more interpretable. - -.. code-block:: python - - from cobra.model_building import ForwardFeatureSelection - from cobra.evaluation import plot_performance_curves - from cobra.evaluation import plot_variable_importance - - forward_selection = ForwardFeatureSelection(max_predictors=30, - pos_only=True) - - # fit the forward feature selection on the train data - # has optional parameters to force and/or exclude certain predictors (see docs) - forward_selection.fit(basetable[basetable["split"] == "train"], - target_column_name, - preselected_predictors) - - # compute model performance (e.g. AUC for train-selection-validation) - performances = (forward_selection - .compute_model_performances(basetable, target_column_name)) - - # plot performance curves - plot_performance_curves(performances) - -Based on the performance curves (AUC per model with a particular number of predictors in case of logistic regression), a final model can then be chosen and the variables importance can be plotted: - -.. code-block:: python - - # After plotting the performances and selecting the model, - # we can extract this model from the forward_selection class: - model = forward_selection.get_model_from_step(5) - - # Note that chosen model has 6 variables (python lists start with index 0), - # which can be obtained as follows: - final_predictors = model.predictors - # We can also compute and plot the importance of each predictor in the model: - variable_importance = model.compute_variable_importance( - basetable[basetable["split"] == "selection"] - ) - plot_variable_importance(variable_importance) - -**Note**: variable importance is based on correlation of the predictor with the *model scores* (and not the true labels!). - -Finally, we can again export the model to a dictionary to store it as JSON - -.. code-block:: python - - model_dict = model.serialize() - - with open(path, "w") as file: - json.dump(model_dict, file) - - # To reload the model again from a JSON file, run the following snippet: - # from cobra.model_building import LogisticRegressionModel - # with open(path, "r") as file: - # model_dict = json.load(file) - # model = LogisticRegressionModel() - # model.deserialize(model_dict) - -Evaluation ----------- - -Now that we have build and selected a final model, it is time to evaluate it against various evaluation metrics: - -.. code-block:: python - - from cobra.evaluation import Evaluator - - # get numpy array of True target labels and predicted scores: - y_true = basetable[basetable["split"] == "selection"][target_column_name].values - y_pred = model.score_model(basetable[basetable["split"] == "selection"]) - - evaluator = Evaluator() - evaluator.fit(y_true, y_pred) # Automatically find the best cut-off probability - - # Get various scalar metrics such as accuracy, AUC, precision, recall, ... - evaluator.scalar_metrics - - # Plot non-scalar evaluation metrics: - evaluator.plot_roc_curve() - - evaluator.plot_confusion_matrix() - - evaluator.plot_cumulative_gains() - - evaluator.plot_lift_curve() - - evaluator.plot_cumulative_response_curve() - -Additionally, we can also compute the output needed to plot the so-called Predictor Insights Graphs (PIGs in short). These are graphs that represents the insights of the relationship between a single predictor (e.g. age) and the target (e.g. burnouts). This is a graph where the predictor is binned into groups, and where we represent group size in bars and group (target) incidence in a colored line. We have the option to force order of predictor values. - -.. code-block:: python - - from cobra.evaluation import generate_pig_tables - from cobra.evaluation import plot_incidence - - predictor_list = [col for col in basetable.columns - if col.endswith("_bin") or col.endswith("_processed")] - pig_tables = generate_pig_tables(basetable[basetable["split"] == "selection"], - id_column_name=id_column_name, - target_column_name=target_column_name, - preprocessed_predictors=predictor_list) - # Plot PIGs - plot_incidence(pig_tables, 'predictor_name', predictor_order) \ No newline at end of file diff --git a/setup.py b/setup.py index e4ec6ef..3653165 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ name="pythonpredictions-cobra", version=__version__, description=("A Python package to build predictive linear and logistic regression " - "models focused on performance and interpretation"), + "models focused on performance and interpretation."), long_description=README, long_description_content_type="text/x-rst", packages=find_packages(include=["cobra", "cobra.*"]),