nannyml

NannyMLApache-2.0长期未更新

NannyML 是 Python 的模型上线后监控库,能在没有真实标签的情况下估计模型性能,并检测数据漂移,帮你在生产环境及时发现模型退化。

nannyml: post-deployment data science in python

v0.13.1发布于 2025-07-12 08:14 UTC2,161star217fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
pip install nannyml
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

无需真实标签即可估计上线后模型性能并检测数据漂移的 Python 库

NannyML 是 Python 的模型上线后监控库,能在没有真实标签的情况下估计模型性能,并检测数据漂移,帮你在生产环境及时发现模型退化。

核心能力

  • 用 CBPE 在无标签下估计分类模型性能
  • 用 DLE 直接估计回归任务的损失
  • 用 PCA 数据重建检测多变量数据漂移
  • 按 chunk 分块计算并可视化性能随时间变化
  • 用 AlertCountRanker 排序漂移最严重的特征

容易踩的坑

依赖 LightGBM,可能需要额外安装操作系统相关的二进制文件;连接数据库读写结果需额外安装 pip install nannyml[db];Docker 示例命令中 -v 与 run 的顺序写反了,照抄会报错

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.13.1
  1. v0.13.1最新正式版2025-07-12 · 2025-07-12 08:14 UTC

    Changed

  2. v0.13.02025-01-14 · 2025-01-14 22:41 UTC
    查看更新说明

    Fixed

    • Fixed incorrect default thresholds in the docstrings for the univariate drift calculator. Thanks for the eagle-eyed reading @josecaloca! (#425)

    Changed

    • Thorough revamp of our dependency version specifications. Dependencies are now less strict, making it easier to use NannyML as a dependency. Big credits to @davisthomas-aily and @canoadri for their contributions, thoughts and patience on this one. Much appreciated! (#433)
    • Added support for Python 3.12
    • Dropped support for Python 3.8
  3. v0.12.12024-09-06 · 2024-09-06 21:35 UTC
    查看更新说明

    Fixed

    • Fixed component filtering misbehaving for CBPE results. (#423)
  4. v0.12.02024-09-06 · 2024-09-06 14:33 UTC
    查看更新说明

    Fixed

    • Fixed broken links in usage logging docs. Cheers once more to @NeoKish! (#417)
    • Fixed issues with runner type validation due to changes in Pydantic 2 behavior. (#421)
    • Fixed a typo in one the plotting blueprint modules. Eagle eyes @nikml! (#418)

    Added

    • Added multiclass support for estimated and realized performance metrics average_precision and business_value. (#409)
    • Added threshold value limits for multiclass metrics. (#411)

    Changed

    • Made the dependencies required for database access optional. Big thanks to @Duncan-Hunter
    • Improved denominator checks in CBPE base estimation functions. (#416)
    • Relaxed constraints for the rich dependency. (#422)

    Removed

    • Dropped support for Python 3.7 as it was causing major issues with dependencies. (#410)
  5. v0.11.02024-07-19 · 2024-07-19 21:12 UTC
    查看更新说明

    Changed

    • Updated Pydantic to ^2.7.4, SQLModel to ^0.0.19. (#401)
    • Removed the drop_duplicates step from the DomainClassifier for a further speedup. (#402)
    • Reverted to previous working dependency configuration for matplotlib as the current one causes issues in conda. (#403)

    Fixed

    • Added DomainClassifier method for drift detection to be run in the CLI.
    • Fixed NaN handling for multiclass confusion matrix estimation in CBPE. (#400)
    • Fixed incorrect handling of columns marked as categorical in Wasserstein and Hellinger drift detection methods. The treat_as_categorical value was ignored. We've also added a treat_as_continuous column to explicitly mark columns as continuous. (#404)
    • Fixed an issue with multiclass AUROC calculation and estimation when not all classes are available in a reference chunk during fitting. (#405)

    Added

    • Added a new data quality calculator to check if continuous values in analysis data are within the ranges encountered in the reference data. Big thanks to @jnesfield! Still needs some documentation... (#408)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    💡 What is NannyML?

    NannyML is an open-source python library that allows you to estimate post-deployment model performance (without access to targets), detect data drift, and intelligently link data drift alerts back to changes in model performance. Built for data scientists, NannyML has an easy-to-use interface, interactive visualizations, is completely model-agnostic and currently supports all tabular use cases, classification and regression.

    The core contributors of NannyML have researched and developed multiple novel algorithms for estimating model performance: confidence-based performance estimation (CBPE) and direct loss estimation (DLE). The nansters also invented a new approach to detect multivariate data drift using PCA-based data reconstruction.

    If you like what we are working on, be sure to become a Nanster yourself, join our community slack and support us with a GitHub star ⭐.

    ☔ Why use NannyML?

    NannyML closes the loop with performance monitoring and post deployment data science, empowering data scientist to quickly understand and automatically detect silent model failure. By using NannyML, data scientists can finally maintain complete visibility and trust in their deployed machine learning models. Allowing you to have the following benefits:

    • End sleepless nights caused by not knowing your model performance 😴
    • Analyse data drift and model performance over time
    • Discover the root cause to why your models are not performing as expected
    • No alert fatigue! React only when necessary if model performance is impacted
    • Painless setup in any environment

    🧠 GO DEEP

    NannyML ResourcesDescription
    ☎️ NannyML 101New to NannyML? Start here!
    🔮 Performance estimationHow the magic works.
    🌍 Real world exampleTake a look at a real-world example of NannyML.
    🔑 Key conceptsGlossary of key concepts we use.
    🔬 Technical referenceMonitor the performance of your ML models.
    🔎 BlogThoughts on post-deployment data science from the NannyML team.
    📬 NewsletterAll things post-deployment data science. Subscribe to see the latest papers and blogs.
    💎 New in v0.13.1New features, bug fixes.
    🧑‍💻 ContributeHow to contribute to the NannyML project and codebase.
    Join slackNeed help with your specific use case? Say hi on slack!

    🔱 Features

    1. Performance estimation and monitoring

    When the actual outcome of your deployed prediction models is delayed, or even when post-deployment target labels are completely absent, you can use NannyML's CBPE-algorithm to estimate model performance for classification or NannyML's DLE-algorithm for regression. These algorithms provide you with any estimated metric you would like, i.e. ROC AUC or RSME. Rather than estimating the performance of future model predictions, CBPE and DLE estimate the expected model performance of the predictions made at inference time.

    NannyML can also track the realised performance of your machine learning model once targets are available.

    2. Data drift detection

    To detect multivariate feature drift NannyML uses PCA-based data reconstruction. Changes in the resulting reconstruction error are monitored over time and data drift alerts are logged when the reconstruction error in a certain period exceeds a threshold. This threshold is calculated based on the reconstruction error observed in the reference period.

    NannyML utilises statistical tests to detect univariate feature drift. We have just added a bunch of new univariate tests including Jensen-Shannon Distance and L-Infinity Distance, check out the comprehensive list. The results of these tests are tracked over time, properly corrected to counteract multiplicity and overlayed on the temporal feature distributions. (It is also possible to visualise the test-statistics over time, to get a notion of the drift magnitude.)

    NannyML uses the same statistical tests to detected model output drift.

    Target distribution drift can also be monitored using the same statistical tests. Bear in mind that this operation requires the presence of actuals.

    3. Intelligent alerting

    Because NannyML can estimate performance, it is possible to weed out data drift alerts that do not impact expected performance, combatting alert fatigue. Besides linking data drift issues to drops in performance it is also possible to prioritise alerts according to other criteria using NannyML's Ranker.

    🚀 Getting started

    Install NannyML

    NannyML depends on LightGBM. This might require you to set install additional OS-specific binaries. You can follow the official installation guide.

    From PyPI:

    pip install nannyml
    

    From Conda:

     conda install -c conda-forge nannyml
    

    Running via Docker:

    docker -v /local/config/dir/:/config/ run nannyml/nannyml nml run
    

    Here be dragons! Use the latest development version of NannyML at your own risk:

    python -m pip install git+https://github.com/NannyML/nannyml
    
    Extras

    If you're using database connections to read model inputs/outputs or you're exporting monitoring results to a database, you'll need to include the optional db dependency. For example using pip:

    pip install nannyml[db]
    

    or using poetry

    poetry install nannyml --all-extras
    

    Quick Start

    The following snippet is based on our latest release.

    import nannyml as nml
    import pandas as pd
    from IPython.display import display
    
    # Load real-world data:
    reference_df, analysis_df, _ = nml.load_us_census_ma_employment_data()
    display(reference_df.head())
    display(analysis_df.head())
    
    # Choose a chunker or set a chunk size:
    chunk_size = 5000
    
    # initialize, specify required data columns, fit estimator and estimate:
    estimator = nml.CBPE(
        problem_type='classification_binary',
        y_pred_proba='predicted_probability',
        y_pred='prediction',
        y_true='employed',
        metrics=['roc_auc'],
        chunk_size=chunk_size,
    )
    estimator = estimator.fit(reference_df)
    estimated_performance = estimator.estimate(analysis_df)
    
    # Show results:
    figure = estimated_performance.plot()
    figure.show()
    
    # Define feature columns:
    features = ['AGEP', 'SCHL', 'MAR', 'RELP', 'DIS', 'ESP', 'CIT', 'MIG', 'MIL', 'ANC',
           'NATIVITY', 'DEAR', 'DEYE', 'DREM', 'SEX', 'RAC1P']
    
    # Initialize the object that will perform the Univariate Drift calculations:
    univariate_calculator = nml.UnivariateDriftCalculator(
        column_names=features,
        chunk_size=chunk_size
    )
    
    univariate_calculator.fit(reference_df)
    univariate_drift = univariate_calculator.calculate(analysis_df)
    
    # Get features that drift the most with count-based ranker:
    alert_count_ranker = nml.AlertCountRanker()
    alert_count_ranked_features = alert_count_ranker.rank(univariate_drift)
    display(alert_count_ranked_features.head())
    
    # Plot drift results for top 3 features:
    figure = univariate_drift.filter(column_names=['RELP','AGEP', 'SCHL']).plot()
    figure.show()
    
    # Compare drift of a selected feature with estimated performance
    uni_drift_AGEP_analysis = univariate_drift.filter(column_names=['AGEP'], period='analysis')
    figure = estimated_performance.compare(uni_drift_AGEP_analysis).plot()
    figure.show()
    
    # Plot distribution changes of the selected features:
    figure = univariate_drift.filter(period='analysis', column_names=['RELP','AGEP', 'SCHL']).plot(kind='distribution')
    figure.show()
    
    # Get target data, calculate, plot and compare realized performance with estimated performance:
    _, _, analysis_targets_df = nml.load_us_census_ma_employment_data()
    
    analysis_with_targets_df = pd.concat([analysis_df, analysis_targets_df], axis=1)
    display(analysis_with_targets_df.head())
    
    performance_calculator = nml.PerformanceCalculator(
        problem_type='classification_binary',
        y_pred_proba='predicted_probability',
        y_pred='prediction',
        y_true='employed',
        metrics=['roc_auc'],
        chunk_size=chunk_size)
    
    performance_calculator.fit(reference_df)
    calculated_performance = performance_calculator.calculate(analysis_with_targets_df)
    
    figure = estimated_performance.filter(period='analysis').compare(calculated_performance).plot()
    figure.show()
    
    

    📖 Documentation

    🦸 Contributing and Community

    We want to build NannyML together with the community! The easiest to contribute at the moment is to propose new features or log bugs under issues. For more information, have a look at how to contribute.

    Thanks to all of our contributors!

    🙋 Get help

    The best place to ask for help is in the community slack. Feel free to join and ask questions or raise issues. Someone will definitely respond to you.

    🥷 Stay updated

    If you want to stay up to date with recent changes to the NannyML library, you can subscribe to our release notes. For thoughts on post-deployment data science from the NannyML team, feel free to visit our blog. You can also sing up for our newsletter, which brings together the best papers, articles, news, and open-source libraries highlighting the ML challenges after deployment.

    📍 Roadmap

    Curious what we are working on next? Have a look at our roadmap. If you have any questions or if you would like to see things prioritised in a different way, let us know!

    📝 Citing NannyML

    To cite NannyML in academic papers, please use the following BibTeX entry.

    Version 0.13.1

        @misc{nannyml,
            title = {{N}anny{ML} (release 0.13.1)},
            howpublished = {\url{https://github.com/NannyML/nannyml}},
            month = mar,
            year = 2023,
            note = {NannyML, Belgium, OHL.},
            key = {NannyML}
        }
    

    📄 License

    NannyML is distributed under an Apache License Version 2.0. A complete version can be found here. All contributions will be distributed under this license.