churnkit 0.75.1a3__tar.gz → 0.76.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/PKG-INFO +5 -2
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/README.md +4 -1
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/pyproject.toml +1 -1
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/__init__.py +11 -1
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/compat/__init__.py +3 -0
- churnkit-0.76.0a1/src/customer_retention/core/config/__init__.py +74 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/config/experiments.py +20 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/spec_generator/mlflow_pipeline_generator.py +222 -149
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/factory.py +8 -5
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/feature_store/base.py +1 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/feature_store/databricks.py +58 -10
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/mlflow/base.py +8 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/mlflow/databricks.py +15 -2
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/mlflow/local.py +7 -0
- churnkit-0.76.0a1/src/customer_retention/integrations/databricks_init.py +141 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_feature_analyzer.py +3 -3
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_feature_engineer.py +2 -2
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_pattern_analyzer.py +4 -3
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/time_series_profiler.py +5 -4
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/time_window_aggregator.py +3 -2
- churnkit-0.75.1a3/src/customer_retention/core/config/__init__.py +0 -39
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/.gitignore +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/LICENSE +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/constraints/.gitkeep +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/00_start_here.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01_data_discovery.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01a_a_temporal_text_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01a_temporal_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01b_temporal_quality.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01c_temporal_patterns.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/01d_event_aggregation.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/02_column_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/02a_text_columns_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/03_quality_assessment.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/04_relationship_analysis.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/05_multi_dataset.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/06_feature_opportunities.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/07_modeling_readiness.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/08_baseline_experiments.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/09_business_alignment.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/10_spec_generation.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/11_scoring_validation.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/exploration_notebooks/12_view_documentation.ipynb +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/README.md +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/data/create_snapshot.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/data/generate_retail_dataset.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/data/generate_test_data.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/data/migrate_parquet_to_delta.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/data/migrate_to_temporal.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/databricks/build_wheel.sh +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/databricks/capture_runtime.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/databricks/dbr_init.sh +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/databricks/generate_constraints.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/databricks/notebook_setup.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/clean_notebook_outputs.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/export_tutorial_html.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/init_project.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/plotly_image_preprocessor.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/run_exploration.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/notebooks/test_notebooks.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/release.sh +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/templates/tutorial_html/conf.json +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/templates/tutorial_html/index.html.j2 +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/scripts/update_notebook_paths.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/exploration_manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/explorer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/findings.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/layered_recommendations.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/recommendation_builder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/auto_explorer/recommendations.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/ab_test_designer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/fairness_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/intervention_matcher.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/report_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/risk_profile.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/business/roi_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/calibration_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/cv_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/error_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/leakage_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/noise_tester.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/overfitting_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/diagnostics/segment_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/discovery/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/discovery/config_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/discovery/discovery_flow.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/discovery/type_inferencer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/cohort_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/counterfactual.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/individual_explainer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/pdp_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/interpretability/shap_explainer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/jupyter_save_hook.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/notebook_html_exporter.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/notebook_progress.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/plotly_preprocessor.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/cleaning/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/cleaning/consistency.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/cleaning/deduplicate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/cleaning/impute.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/cleaning/outlier.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/datetime/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/datetime/extract.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/encoding/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/encoding/categorical.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/pipeline.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/selection/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/selection/drop_column.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/transform/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/transform/power.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/recommendations/transform/scale.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/visualization/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/visualization/chart_builder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/visualization/console.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/visualization/display.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/analysis/visualization/number_formatter.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/artifacts/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/artifacts/fit_artifact_registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/cli.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/compat/detection.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/compat/ops.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/compat/pandas_backend.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/compat/spark_backend.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/deployer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/explainer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/feature_eng.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/ingester.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/profiler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/trainer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/transformer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/components/validator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/enums.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/orchestrator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/components/registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/config/column_config.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/config/pipeline_config.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/config/source_config.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/utils/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/utils/leakage.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/utils/severity.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/core/utils/statistics.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/cell_builder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/config.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/databricks_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/local_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/project_init.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/runner.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/script_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/base_stage.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s01_ingestion.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s02_profiling.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s03_cleaning.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s04_transformation.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s05_feature_engineering.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s06_feature_selection.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s07_model_training.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s08_deployment.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s09_monitoring.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s10_batch_inference.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/notebook_generator/stages/s11_feature_store.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/code_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/context.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/data_materializer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/databricks_exporter.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/orchestration/doc_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/pipeline_generator/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/pipeline_generator/findings_parser.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/pipeline_generator/generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/pipeline_generator/models.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/pipeline_generator/renderer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/spec_generator/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/spec_generator/databricks_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/spec_generator/generic_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/generators/spec_generator/pipeline_spec.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/feature_store/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/feature_store/feast_adapter.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/feature_store/local.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/mlflow/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/mlflow/experiment_tracker.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/storage/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/storage/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/storage/databricks.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/adapters/storage/local.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/feature_store/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/feature_store/definitions.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/feature_store/manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/feature_store/registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/context.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/feedback_collector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/orchestrator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/recommendation_tracker.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/iteration/signals.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/llm_context/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/llm_context/context_builder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/llm_context/prompts.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/batch_integration.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/early_warning_model.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/event_schema.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/online_store_writer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/realtime_scorer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/trigger_engine.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/integrations/streaming/window_aggregator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/cleaning/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/cleaning/base.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/cleaning/missing_handler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/cleaning/outlier_handler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/deployment/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/deployment/batch_scorer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/deployment/champion_challenger.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/deployment/model_registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/deployment/retraining_trigger.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/behavioral_features.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/customer_segmentation.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/feature_definitions.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/feature_engineer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/feature_manifest.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/feature_selector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/interaction_features.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/features/temporal_features.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/ingestion/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/ingestion/load_result.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/ingestion/loaders.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/ingestion/source_registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/baseline_trainer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/cross_validator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/data_splitter.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/feature_scaler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/hyperparameter_tuner.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/imbalance_handler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/mlflow_logger.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/model_comparator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/model_evaluator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/modeling/threshold_optimizer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/monitoring/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/monitoring/alert_manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/monitoring/drift_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/monitoring/performance_monitor.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/preprocessing/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/preprocessing/transformer_manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/categorical_distribution.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/categorical_target_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/column_profiler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/distribution_analysis.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/drift_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/feature_capacity.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/pattern_analysis_config.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/profile_result.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/quality_checks.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/relationship_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/relationship_recommender.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/report_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/scd_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/segment_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/segment_aware_outlier.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/target_level_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_coverage.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_quality_checks.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/temporal_target_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/text_embedder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/text_processor.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/text_reducer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/type_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/profiling/window_recommendation.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/access_guard.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/cutoff_analyzer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/data_preparer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/point_in_time_join.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/point_in_time_registry.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/scenario_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/snapshot_manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/synthetic_coordinator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/timestamp_discovery.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/temporal/timestamp_manager.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/binary_handler.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/categorical_encoder.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/datetime_transformer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/numeric_transformer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/transformation/pipeline.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/adversarial_scoring_validator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/business_sense_gate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/data_quality_gate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/data_validators.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/feature_quality_gate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/gates.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/leakage_gate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/model_validity_gate.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/pipeline_validation_runner.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/quality_scorer.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/rule_generator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/scoring_pipeline_validator.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/stages/validation/timeseries_detector.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/transforms/__init__.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/transforms/artifact_store.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/transforms/executor.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/transforms/fitted.py +0 -0
- {churnkit-0.75.1a3 → churnkit-0.76.0a1}/src/customer_retention/transforms/ops.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: churnkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.76.0a1
|
|
4
4
|
Summary: Structured ML framework for customer churn prediction -- from exploration notebooks to production pipelines, locally or on Databricks.
|
|
5
5
|
Project-URL: Homepage, https://github.com/aladjov/CR
|
|
6
6
|
Project-URL: Documentation, https://github.com/aladjov/CR/wiki
|
|
@@ -164,12 +164,14 @@ It serves two audiences:
|
|
|
164
164
|
|
|
165
165
|
## Quick Start
|
|
166
166
|
|
|
167
|
-
### 1. Install
|
|
167
|
+
### 1. Install (local)
|
|
168
168
|
|
|
169
169
|
```bash
|
|
170
170
|
pip install "churnkit[ml]"
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
+
For **Databricks**, see the [Databricks Installation](https://github.com/aladjov/CR/wiki/Databricks-Installation) guide.
|
|
174
|
+
|
|
173
175
|
### 2. Bootstrap notebooks into your project
|
|
174
176
|
|
|
175
177
|
```bash
|
|
@@ -200,6 +202,7 @@ Detailed documentation lives in the [Wiki](https://github.com/aladjov/CR/wiki):
|
|
|
200
202
|
| Topic | Wiki Page |
|
|
201
203
|
|-------|-----------|
|
|
202
204
|
| Installation options & environment setup | [Getting Started](https://github.com/aladjov/CR/wiki/Getting-Started) |
|
|
205
|
+
| Databricks install & `databricks_init()` setup | [Databricks Installation](https://github.com/aladjov/CR/wiki/Databricks-Installation) |
|
|
203
206
|
| Medallion architecture & system design | [Architecture](https://github.com/aladjov/CR/wiki/Architecture) |
|
|
204
207
|
| Notebook workflow & iteration tracking | [Exploration Loop](https://github.com/aladjov/CR/wiki/Exploration-Loop) |
|
|
205
208
|
| Leakage-safe temporal data preparation | [Temporal Framework](https://github.com/aladjov/CR/wiki/Temporal-Framework) |
|
|
@@ -34,12 +34,14 @@ It serves two audiences:
|
|
|
34
34
|
|
|
35
35
|
## Quick Start
|
|
36
36
|
|
|
37
|
-
### 1. Install
|
|
37
|
+
### 1. Install (local)
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
pip install "churnkit[ml]"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
For **Databricks**, see the [Databricks Installation](https://github.com/aladjov/CR/wiki/Databricks-Installation) guide.
|
|
44
|
+
|
|
43
45
|
### 2. Bootstrap notebooks into your project
|
|
44
46
|
|
|
45
47
|
```bash
|
|
@@ -70,6 +72,7 @@ Detailed documentation lives in the [Wiki](https://github.com/aladjov/CR/wiki):
|
|
|
70
72
|
| Topic | Wiki Page |
|
|
71
73
|
|-------|-----------|
|
|
72
74
|
| Installation options & environment setup | [Getting Started](https://github.com/aladjov/CR/wiki/Getting-Started) |
|
|
75
|
+
| Databricks install & `databricks_init()` setup | [Databricks Installation](https://github.com/aladjov/CR/wiki/Databricks-Installation) |
|
|
73
76
|
| Medallion architecture & system design | [Architecture](https://github.com/aladjov/CR/wiki/Architecture) |
|
|
74
77
|
| Notebook workflow & iteration tracking | [Exploration Loop](https://github.com/aladjov/CR/wiki/Exploration-Loop) |
|
|
75
78
|
| Leakage-safe temporal data preparation | [Temporal Framework](https://github.com/aladjov/CR/wiki/Temporal-Framework) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "churnkit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.76.0a1"
|
|
4
4
|
description = "Structured ML framework for customer churn prediction -- from exploration notebooks to production pipelines, locally or on Databricks."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "Apache-2.0"}
|
|
@@ -17,7 +17,7 @@ Main module categories:
|
|
|
17
17
|
llm_context, iteration)
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
__version__ = "0.
|
|
20
|
+
__version__ = "0.76.0a1"
|
|
21
21
|
|
|
22
22
|
# Environment utilities (always available)
|
|
23
23
|
from .core.compat import (
|
|
@@ -34,4 +34,14 @@ __all__ = [
|
|
|
34
34
|
"is_spark_available",
|
|
35
35
|
"is_databricks",
|
|
36
36
|
"is_notebook",
|
|
37
|
+
# Databricks initialization
|
|
38
|
+
"databricks_init",
|
|
37
39
|
]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def __getattr__(name: str):
|
|
43
|
+
if name == "databricks_init":
|
|
44
|
+
from .integrations.databricks_init import databricks_init
|
|
45
|
+
|
|
46
|
+
return databricks_init
|
|
47
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
@@ -98,6 +98,8 @@ def merge(left: Any, right: Any, how: str = "inner", on: Any = None, **kwargs: A
|
|
|
98
98
|
return pd.merge(left, right, how=how, on=on, **kwargs)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
native_pd = _pandas
|
|
102
|
+
|
|
101
103
|
Timestamp = _pandas.Timestamp
|
|
102
104
|
Timedelta = _pandas.Timedelta
|
|
103
105
|
DatetimeIndex = _pandas.DatetimeIndex
|
|
@@ -213,6 +215,7 @@ compat = PandasCompat()
|
|
|
213
215
|
|
|
214
216
|
__all__ = [
|
|
215
217
|
"pd",
|
|
218
|
+
"native_pd",
|
|
216
219
|
"DataFrame",
|
|
217
220
|
"Series",
|
|
218
221
|
"Timestamp",
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from .column_config import ColumnConfig, ColumnType, DatasetGranularity
|
|
2
|
+
from .experiments import (
|
|
3
|
+
CATALOG,
|
|
4
|
+
DATA_DIR,
|
|
5
|
+
EXPERIMENT_NAME,
|
|
6
|
+
EXPERIMENTS_DIR,
|
|
7
|
+
FEATURE_STORE_DIR,
|
|
8
|
+
FINDINGS_DIR,
|
|
9
|
+
MLRUNS_DIR,
|
|
10
|
+
OUTPUT_DIR,
|
|
11
|
+
SCHEMA,
|
|
12
|
+
WORKSPACE_PATH,
|
|
13
|
+
get_catalog,
|
|
14
|
+
get_data_dir,
|
|
15
|
+
get_experiment_name,
|
|
16
|
+
get_experiments_dir,
|
|
17
|
+
get_feature_store_dir,
|
|
18
|
+
get_findings_dir,
|
|
19
|
+
get_mlruns_dir,
|
|
20
|
+
get_notebook_experiments_dir,
|
|
21
|
+
get_schema,
|
|
22
|
+
get_workspace_path,
|
|
23
|
+
setup_experiments_structure,
|
|
24
|
+
)
|
|
25
|
+
from .pipeline_config import (
|
|
26
|
+
BronzeConfig,
|
|
27
|
+
DedupStrategy,
|
|
28
|
+
GoldConfig,
|
|
29
|
+
ModelingConfig,
|
|
30
|
+
PathConfig,
|
|
31
|
+
PipelineConfig,
|
|
32
|
+
SilverConfig,
|
|
33
|
+
ValidationConfig,
|
|
34
|
+
)
|
|
35
|
+
from .source_config import DataSourceConfig, FileFormat, Grain, SourceType
|
|
36
|
+
|
|
37
|
+
__all__ = [
|
|
38
|
+
"ColumnType",
|
|
39
|
+
"ColumnConfig",
|
|
40
|
+
"DatasetGranularity",
|
|
41
|
+
"SourceType",
|
|
42
|
+
"FileFormat",
|
|
43
|
+
"Grain",
|
|
44
|
+
"DataSourceConfig",
|
|
45
|
+
"DedupStrategy",
|
|
46
|
+
"BronzeConfig",
|
|
47
|
+
"SilverConfig",
|
|
48
|
+
"GoldConfig",
|
|
49
|
+
"ModelingConfig",
|
|
50
|
+
"ValidationConfig",
|
|
51
|
+
"PathConfig",
|
|
52
|
+
"PipelineConfig",
|
|
53
|
+
"CATALOG",
|
|
54
|
+
"SCHEMA",
|
|
55
|
+
"WORKSPACE_PATH",
|
|
56
|
+
"EXPERIMENT_NAME",
|
|
57
|
+
"EXPERIMENTS_DIR",
|
|
58
|
+
"FINDINGS_DIR",
|
|
59
|
+
"DATA_DIR",
|
|
60
|
+
"MLRUNS_DIR",
|
|
61
|
+
"FEATURE_STORE_DIR",
|
|
62
|
+
"OUTPUT_DIR",
|
|
63
|
+
"get_catalog",
|
|
64
|
+
"get_schema",
|
|
65
|
+
"get_workspace_path",
|
|
66
|
+
"get_experiment_name",
|
|
67
|
+
"get_experiments_dir",
|
|
68
|
+
"get_findings_dir",
|
|
69
|
+
"get_data_dir",
|
|
70
|
+
"get_mlruns_dir",
|
|
71
|
+
"get_feature_store_dir",
|
|
72
|
+
"get_notebook_experiments_dir",
|
|
73
|
+
"setup_experiments_structure",
|
|
74
|
+
]
|
|
@@ -36,12 +36,32 @@ def get_feature_store_dir(default: Optional[str] = None) -> Path:
|
|
|
36
36
|
return get_experiments_dir(default) / "feature_repo"
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
def get_catalog(default: str = "main") -> str:
|
|
40
|
+
return os.environ.get("CR_CATALOG", default)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_schema(default: str = "default") -> str:
|
|
44
|
+
return os.environ.get("CR_SCHEMA", default)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_workspace_path(default: str | None = None) -> str | None:
|
|
48
|
+
return os.environ.get("CR_WORKSPACE_PATH", default)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_experiment_name(default: str = "customer_retention") -> str:
|
|
52
|
+
return os.environ.get("CR_EXPERIMENT_NAME", default)
|
|
53
|
+
|
|
54
|
+
|
|
39
55
|
EXPERIMENTS_DIR = get_experiments_dir()
|
|
40
56
|
FINDINGS_DIR = get_findings_dir()
|
|
41
57
|
DATA_DIR = get_data_dir()
|
|
42
58
|
MLRUNS_DIR = get_mlruns_dir()
|
|
43
59
|
FEATURE_STORE_DIR = get_feature_store_dir()
|
|
44
60
|
OUTPUT_DIR = FINDINGS_DIR
|
|
61
|
+
CATALOG = get_catalog()
|
|
62
|
+
SCHEMA = get_schema()
|
|
63
|
+
WORKSPACE_PATH = get_workspace_path()
|
|
64
|
+
EXPERIMENT_NAME = get_experiment_name()
|
|
45
65
|
|
|
46
66
|
|
|
47
67
|
def setup_experiments_structure(experiments_dir: Optional[Path] = None) -> None:
|