churnkit 0.76.0a1__tar.gz → 0.76.0a3__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.76.0a1 → churnkit-0.76.0a3}/PKG-INFO +1 -1
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/pyproject.toml +1 -1
- churnkit-0.76.0a3/scripts/.claude/settings.local.json +10 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/__init__.py +1 -1
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/experiments.py +15 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/databricks_init.py +30 -2
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_pattern_analyzer.py +0 -1
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/time_series_profiler.py +0 -1
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/time_window_aggregator.py +0 -1
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/.gitignore +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/LICENSE +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/README.md +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/constraints/.gitkeep +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/00_start_here.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01_data_discovery.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01a_a_temporal_text_deep_dive.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01a_temporal_deep_dive.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01b_temporal_quality.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01c_temporal_patterns.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01d_event_aggregation.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/02_column_deep_dive.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/02a_text_columns_deep_dive.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/03_quality_assessment.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/04_relationship_analysis.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/05_multi_dataset.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/06_feature_opportunities.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/07_modeling_readiness.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/08_baseline_experiments.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/09_business_alignment.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/10_spec_generation.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/11_scoring_validation.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/12_view_documentation.ipynb +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/README.md +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/data/create_snapshot.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/data/generate_retail_dataset.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/data/generate_test_data.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/data/migrate_parquet_to_delta.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/data/migrate_to_temporal.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/databricks/build_wheel.sh +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/databricks/capture_runtime.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/databricks/dbr_init.sh +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/databricks/generate_constraints.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/databricks/notebook_setup.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/clean_notebook_outputs.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/export_tutorial_html.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/init_project.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/plotly_image_preprocessor.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/run_exploration.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/notebooks/test_notebooks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/release.sh +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/templates/tutorial_html/conf.json +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/templates/tutorial_html/index.html.j2 +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/scripts/update_notebook_paths.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/exploration_manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/explorer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/findings.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/layered_recommendations.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/recommendation_builder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/recommendations.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/ab_test_designer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/fairness_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/intervention_matcher.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/report_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/risk_profile.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/roi_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/calibration_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/cv_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/error_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/leakage_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/noise_tester.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/overfitting_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/segment_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/config_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/discovery_flow.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/type_inferencer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/cohort_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/counterfactual.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/individual_explainer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/pdp_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/shap_explainer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/jupyter_save_hook.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/notebook_html_exporter.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/notebook_progress.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/plotly_preprocessor.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/cleaning/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/cleaning/consistency.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/cleaning/deduplicate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/cleaning/impute.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/cleaning/outlier.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/datetime/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/datetime/extract.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/encoding/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/encoding/categorical.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/pipeline.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/selection/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/selection/drop_column.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/transform/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/transform/power.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/transform/scale.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/chart_builder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/console.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/display.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/number_formatter.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/artifacts/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/artifacts/fit_artifact_registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/cli.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/detection.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/ops.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/pandas_backend.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/spark_backend.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/deployer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/explainer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/feature_eng.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/ingester.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/profiler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/trainer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/transformer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/validator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/enums.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/orchestrator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/column_config.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/pipeline_config.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/source_config.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/utils/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/utils/leakage.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/utils/severity.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/utils/statistics.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/cell_builder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/config.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/databricks_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/local_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/project_init.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/runner.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/script_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/base_stage.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s01_ingestion.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s02_profiling.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s03_cleaning.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s04_transformation.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s05_feature_engineering.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s06_feature_selection.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s07_model_training.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s08_deployment.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s09_monitoring.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s10_batch_inference.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/stages/s11_feature_store.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/code_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/context.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/data_materializer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/databricks_exporter.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/doc_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/pipeline_generator/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/pipeline_generator/findings_parser.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/pipeline_generator/generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/pipeline_generator/models.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/pipeline_generator/renderer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/spec_generator/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/spec_generator/databricks_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/spec_generator/generic_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/spec_generator/mlflow_pipeline_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/spec_generator/pipeline_spec.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/factory.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/feature_store/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/feature_store/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/feature_store/databricks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/feature_store/feast_adapter.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/feature_store/local.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/mlflow/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/mlflow/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/mlflow/databricks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/mlflow/experiment_tracker.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/mlflow/local.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/storage/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/storage/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/storage/databricks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/adapters/storage/local.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/feature_store/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/feature_store/definitions.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/feature_store/manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/feature_store/registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/context.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/feedback_collector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/orchestrator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/recommendation_tracker.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/iteration/signals.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/llm_context/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/llm_context/context_builder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/llm_context/prompts.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/batch_integration.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/early_warning_model.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/event_schema.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/online_store_writer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/realtime_scorer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/trigger_engine.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/streaming/window_aggregator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/cleaning/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/cleaning/base.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/cleaning/missing_handler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/cleaning/outlier_handler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/deployment/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/deployment/batch_scorer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/deployment/champion_challenger.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/deployment/model_registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/deployment/retraining_trigger.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/behavioral_features.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/customer_segmentation.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/feature_definitions.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/feature_engineer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/feature_manifest.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/feature_selector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/interaction_features.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/features/temporal_features.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/ingestion/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/ingestion/load_result.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/ingestion/loaders.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/ingestion/source_registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/baseline_trainer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/cross_validator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/data_splitter.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/feature_scaler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/hyperparameter_tuner.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/imbalance_handler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/mlflow_logger.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/model_comparator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/model_evaluator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/modeling/threshold_optimizer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/monitoring/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/monitoring/alert_manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/monitoring/drift_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/monitoring/performance_monitor.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/preprocessing/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/preprocessing/transformer_manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/categorical_distribution.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/categorical_target_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/column_profiler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/distribution_analysis.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/drift_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/feature_capacity.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/pattern_analysis_config.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/profile_result.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/quality_checks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/relationship_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/relationship_recommender.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/report_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/scd_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/segment_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/segment_aware_outlier.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/target_level_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_coverage.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_feature_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_feature_engineer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_quality_checks.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/temporal_target_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/text_embedder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/text_processor.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/text_reducer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/type_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/profiling/window_recommendation.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/access_guard.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/cutoff_analyzer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/data_preparer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/point_in_time_join.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/point_in_time_registry.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/scenario_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/snapshot_manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/synthetic_coordinator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/timestamp_discovery.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/temporal/timestamp_manager.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/binary_handler.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/categorical_encoder.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/datetime_transformer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/numeric_transformer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/transformation/pipeline.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/adversarial_scoring_validator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/business_sense_gate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/data_quality_gate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/data_validators.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/feature_quality_gate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/gates.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/leakage_gate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/model_validity_gate.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/pipeline_validation_runner.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/quality_scorer.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/rule_generator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/scoring_pipeline_validator.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/stages/validation/timeseries_detector.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/transforms/__init__.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/transforms/artifact_store.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/transforms/executor.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/transforms/fitted.py +0 -0
- {churnkit-0.76.0a1 → churnkit-0.76.0a3}/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.76.
|
|
3
|
+
Version: 0.76.0a3
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "churnkit"
|
|
3
|
-
version = "0.76.
|
|
3
|
+
version = "0.76.0a3"
|
|
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"}
|
|
@@ -64,6 +64,21 @@ WORKSPACE_PATH = get_workspace_path()
|
|
|
64
64
|
EXPERIMENT_NAME = get_experiment_name()
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
def reload_config() -> None:
|
|
68
|
+
global EXPERIMENTS_DIR, FINDINGS_DIR, DATA_DIR, MLRUNS_DIR, FEATURE_STORE_DIR
|
|
69
|
+
global OUTPUT_DIR, CATALOG, SCHEMA, WORKSPACE_PATH, EXPERIMENT_NAME
|
|
70
|
+
EXPERIMENTS_DIR = get_experiments_dir()
|
|
71
|
+
FINDINGS_DIR = get_findings_dir()
|
|
72
|
+
DATA_DIR = get_data_dir()
|
|
73
|
+
MLRUNS_DIR = get_mlruns_dir()
|
|
74
|
+
FEATURE_STORE_DIR = get_feature_store_dir()
|
|
75
|
+
OUTPUT_DIR = FINDINGS_DIR
|
|
76
|
+
CATALOG = get_catalog()
|
|
77
|
+
SCHEMA = get_schema()
|
|
78
|
+
WORKSPACE_PATH = get_workspace_path()
|
|
79
|
+
EXPERIMENT_NAME = get_experiment_name()
|
|
80
|
+
|
|
81
|
+
|
|
67
82
|
def setup_experiments_structure(experiments_dir: Optional[Path] = None) -> None:
|
|
68
83
|
base = experiments_dir or get_experiments_dir()
|
|
69
84
|
directories = [
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/integrations/databricks_init.py
RENAMED
|
@@ -22,7 +22,7 @@ class DatabricksInitResult:
|
|
|
22
22
|
"CR_CATALOG": self.catalog,
|
|
23
23
|
"CR_SCHEMA": self.schema,
|
|
24
24
|
"CR_EXPERIMENT_NAME": self.experiment_name,
|
|
25
|
-
"CR_EXPERIMENTS_DIR": f"/
|
|
25
|
+
"CR_EXPERIMENTS_DIR": f"/Volumes/{self.catalog}/{self.schema}/experiments",
|
|
26
26
|
}
|
|
27
27
|
if self.workspace_path:
|
|
28
28
|
env_vars["CR_WORKSPACE_PATH"] = self.workspace_path
|
|
@@ -38,9 +38,13 @@ def databricks_init(
|
|
|
38
38
|
model_name: str = "customer_retention",
|
|
39
39
|
) -> DatabricksInitResult:
|
|
40
40
|
_validate_databricks_environment()
|
|
41
|
+
if workspace_path:
|
|
42
|
+
workspace_path = _normalize_workspace_path(workspace_path)
|
|
41
43
|
_set_environment_variables(catalog, schema, workspace_path)
|
|
42
44
|
resolved_experiment_name = experiment_name or _resolve_experiment_name_from_notebook_path()
|
|
45
|
+
resolved_experiment_name = _make_absolute_experiment_path(resolved_experiment_name, workspace_path)
|
|
43
46
|
_set_experiment_name_env_var(resolved_experiment_name)
|
|
47
|
+
_reload_config_constants()
|
|
44
48
|
_configure_mlflow_experiment(resolved_experiment_name)
|
|
45
49
|
notebooks_copied: list[str] = []
|
|
46
50
|
if copy_notebooks and workspace_path:
|
|
@@ -68,15 +72,21 @@ def _validate_databricks_environment() -> None:
|
|
|
68
72
|
def _set_environment_variables(catalog: str, schema: str, workspace_path: str | None) -> None:
|
|
69
73
|
os.environ["CR_CATALOG"] = catalog
|
|
70
74
|
os.environ["CR_SCHEMA"] = schema
|
|
75
|
+
os.environ["CR_EXPERIMENTS_DIR"] = f"/Volumes/{catalog}/{schema}/experiments"
|
|
71
76
|
if workspace_path:
|
|
72
77
|
os.environ["CR_WORKSPACE_PATH"] = workspace_path
|
|
73
|
-
os.environ["CR_EXPERIMENTS_DIR"] = f"/Workspace/{workspace_path}/experiments"
|
|
74
78
|
|
|
75
79
|
|
|
76
80
|
def _set_experiment_name_env_var(experiment_name: str) -> None:
|
|
77
81
|
os.environ["CR_EXPERIMENT_NAME"] = experiment_name
|
|
78
82
|
|
|
79
83
|
|
|
84
|
+
def _reload_config_constants() -> None:
|
|
85
|
+
from customer_retention.core.config.experiments import reload_config
|
|
86
|
+
|
|
87
|
+
reload_config()
|
|
88
|
+
|
|
89
|
+
|
|
80
90
|
def _resolve_experiment_name_from_notebook_path() -> str:
|
|
81
91
|
try:
|
|
82
92
|
dbutils = _get_dbutils()
|
|
@@ -97,6 +107,23 @@ def _get_dbutils() -> Any | None:
|
|
|
97
107
|
return None
|
|
98
108
|
|
|
99
109
|
|
|
110
|
+
def _normalize_workspace_path(workspace_path: str) -> str:
|
|
111
|
+
if workspace_path.startswith("/Workspace/"):
|
|
112
|
+
return workspace_path[len("/Workspace/"):]
|
|
113
|
+
return workspace_path
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _make_absolute_experiment_path(experiment_name: str, workspace_path: str | None) -> str:
|
|
117
|
+
if experiment_name.startswith("/"):
|
|
118
|
+
return experiment_name
|
|
119
|
+
if not workspace_path:
|
|
120
|
+
return experiment_name
|
|
121
|
+
base = workspace_path.removeprefix("/Workspace")
|
|
122
|
+
if not base.startswith("/"):
|
|
123
|
+
base = f"/{base}"
|
|
124
|
+
return f"{base}/{experiment_name}"
|
|
125
|
+
|
|
126
|
+
|
|
100
127
|
def _configure_mlflow_experiment(experiment_name: str) -> None:
|
|
101
128
|
try:
|
|
102
129
|
import mlflow
|
|
@@ -132,6 +159,7 @@ def _display_init_summary(result: DatabricksInitResult) -> None:
|
|
|
132
159
|
print(f" Catalog: {result.catalog}")
|
|
133
160
|
print(f" Schema: {result.schema}")
|
|
134
161
|
print(f" Experiment: {result.experiment_name}")
|
|
162
|
+
print(f" Experiments Dir: /Volumes/{result.catalog}/{result.schema}/experiments")
|
|
135
163
|
print(f" Workspace Path: {result.workspace_path or '(not set)'}")
|
|
136
164
|
print(f" Model Name: {result.model_name}")
|
|
137
165
|
if result.notebooks_copied:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/01a_a_temporal_text_deep_dive.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/02a_text_columns_deep_dive.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/04_relationship_analysis.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/exploration_notebooks/06_feature_opportunities.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/explorer.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/auto_explorer/findings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/__init__.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/ab_test_designer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/report_generator.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/risk_profile.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/business/roi_analyzer.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/cv_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/diagnostics/noise_tester.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/discovery_flow.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/discovery/type_inferencer.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/interpretability/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/jupyter_save_hook.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/notebook_html_exporter.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/notebook_progress.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/plotly_preprocessor.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/__init__.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/pipeline.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/recommendations/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/console.py
RENAMED
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/analysis/visualization/display.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/artifacts/fit_artifact_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/compat/pandas_backend.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/components/trainer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/components/orchestrator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/core/config/pipeline_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/notebook_generator/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{churnkit-0.76.0a1 → churnkit-0.76.0a3}/src/customer_retention/generators/orchestration/context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|