churnkit 0.75.1a3__py3-none-any.whl → 0.76.0a1__py3-none-any.whl
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.dist-info → churnkit-0.76.0a1.dist-info}/METADATA +5 -2
- {churnkit-0.75.1a3.dist-info → churnkit-0.76.0a1.dist-info}/RECORD +41 -40
- customer_retention/__init__.py +11 -1
- customer_retention/core/compat/__init__.py +3 -0
- customer_retention/core/config/__init__.py +43 -8
- customer_retention/core/config/experiments.py +20 -0
- customer_retention/generators/spec_generator/mlflow_pipeline_generator.py +222 -149
- customer_retention/integrations/adapters/factory.py +8 -5
- customer_retention/integrations/adapters/feature_store/base.py +1 -0
- customer_retention/integrations/adapters/feature_store/databricks.py +58 -10
- customer_retention/integrations/adapters/mlflow/base.py +8 -0
- customer_retention/integrations/adapters/mlflow/databricks.py +15 -2
- customer_retention/integrations/adapters/mlflow/local.py +7 -0
- customer_retention/integrations/databricks_init.py +141 -0
- customer_retention/stages/profiling/temporal_feature_analyzer.py +3 -3
- customer_retention/stages/profiling/temporal_feature_engineer.py +2 -2
- customer_retention/stages/profiling/temporal_pattern_analyzer.py +4 -3
- customer_retention/stages/profiling/time_series_profiler.py +5 -4
- customer_retention/stages/profiling/time_window_aggregator.py +3 -2
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/00_start_here.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01_data_discovery.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01a_a_temporal_text_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01a_temporal_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01b_temporal_quality.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01c_temporal_patterns.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/01d_event_aggregation.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/02_column_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/02a_text_columns_deep_dive.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/03_quality_assessment.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/04_relationship_analysis.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/05_multi_dataset.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/06_feature_opportunities.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/07_modeling_readiness.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/08_baseline_experiments.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/09_business_alignment.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/10_spec_generation.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/11_scoring_validation.ipynb +0 -0
- {churnkit-0.75.1a3.data → churnkit-0.76.0a1.data}/data/share/churnkit/exploration_notebooks/12_view_documentation.ipynb +0 -0
- {churnkit-0.75.1a3.dist-info → churnkit-0.76.0a1.dist-info}/WHEEL +0 -0
- {churnkit-0.75.1a3.dist-info → churnkit-0.76.0a1.dist-info}/entry_points.txt +0 -0
- {churnkit-0.75.1a3.dist-info → churnkit-0.76.0a1.dist-info}/licenses/LICENSE +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) |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
customer_retention/__init__.py,sha256=
|
|
1
|
+
customer_retention/__init__.py,sha256=khjH4K4e69Nc91vJZGDCbV4-ZXtvOjTTVFPVC4-HG5E,1406
|
|
2
2
|
customer_retention/cli.py,sha256=Wdl540cZgu_9mV-hWmTV9jD3S8QTDR8Ik-5hQXYCvmg,2466
|
|
3
3
|
customer_retention/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
customer_retention/analysis/jupyter_save_hook.py,sha256=iiNFIL83yOPX8BGUjCE6Pt5Kc8X-2adtE1_NZTMUaZQ,947
|
|
@@ -63,7 +63,7 @@ customer_retention/analysis/visualization/number_formatter.py,sha256=I1gUB0tEmfT
|
|
|
63
63
|
customer_retention/artifacts/__init__.py,sha256=zTROqiS6zlkkuCZgR6YOB0Cvlsyr0TpRBYsOEorpDYw,118
|
|
64
64
|
customer_retention/artifacts/fit_artifact_registry.py,sha256=aNfZC0Dgbc6jEwRR5keDEop9jo_tuL82hKO3ouCh5eY,5750
|
|
65
65
|
customer_retention/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
-
customer_retention/core/compat/__init__.py,sha256=
|
|
66
|
+
customer_retention/core/compat/__init__.py,sha256=mriOzKG3GTe_fNvnES39BuEzgBcYO2Qa0RcqgcTVpec,7283
|
|
67
67
|
customer_retention/core/compat/detection.py,sha256=6W_1LefgQriBtRY2PnvSCUGDt0X63oIUEEVjFqG3qH0,2492
|
|
68
68
|
customer_retention/core/compat/ops.py,sha256=L-tAh4A3UEfRvePS6rAbhqb0QtZ_bN-TV7ZWpTkMFLA,1809
|
|
69
69
|
customer_retention/core/compat/pandas_backend.py,sha256=14JPoYTW6X-a3UwFaemhmPr8zi_GTdZnyitmqPQODR0,1839
|
|
@@ -82,9 +82,9 @@ customer_retention/core/components/components/profiler.py,sha256=Yz-vsTSS9UaLgXL
|
|
|
82
82
|
customer_retention/core/components/components/trainer.py,sha256=C_6N7n7qpz3Ks62Ke5BjF_pwbv21DXfnsze1LFSUAPo,1579
|
|
83
83
|
customer_retention/core/components/components/transformer.py,sha256=saEO6cRzKitUsmw-9fIweOKjydH64SOVvUKfcpsR5yk,1401
|
|
84
84
|
customer_retention/core/components/components/validator.py,sha256=5IbUqPYhsvZBTRx0X3MKV2dvZrgTcI19MM9c5_9t2CU,1405
|
|
85
|
-
customer_retention/core/config/__init__.py,sha256=
|
|
85
|
+
customer_retention/core/config/__init__.py,sha256=VXNmwSFG3wY6Budh82WRj26X07WCQKgl-M9sVwx8eds,1587
|
|
86
86
|
customer_retention/core/config/column_config.py,sha256=rmMJFV4wK66q-DDQAJXe0EuXdrWd_6bg8s81NQQ54_A,3051
|
|
87
|
-
customer_retention/core/config/experiments.py,sha256=
|
|
87
|
+
customer_retention/core/config/experiments.py,sha256=5te4MT6kRiMYB3IglIH4Wkqzl7rdEKOzZY_0t7UiDGg,2685
|
|
88
88
|
customer_retention/core/config/pipeline_config.py,sha256=jriAcP-_UAlVTT_vVlWUPF97ieIguqlE5hrl9Ny0UiI,3675
|
|
89
89
|
customer_retention/core/config/source_config.py,sha256=NnZUytq4NVvRVmp1ZtoFO_SiaIvSoJwkhw5WXy4Wi_c,2534
|
|
90
90
|
customer_retention/core/utils/__init__.py,sha256=9b8SwZGiLP-glYwzcp-1aWCeTGIploAPokwITbUCneA,971
|
|
@@ -128,22 +128,23 @@ customer_retention/generators/pipeline_generator/renderer.py,sha256=bvGTU_AkRgFS
|
|
|
128
128
|
customer_retention/generators/spec_generator/__init__.py,sha256=vojlxKgLGnLHH9DNolB8mgL0_FsIfSSLmuHPXyr8bYY,782
|
|
129
129
|
customer_retention/generators/spec_generator/databricks_generator.py,sha256=o_qAik7mXuwzC9c7xUTkno5GHUmfHz5F2dIWqTcaDzw,15416
|
|
130
130
|
customer_retention/generators/spec_generator/generic_generator.py,sha256=I_glnOOsXDbL_v_ffxkeKwSYm5MCEB5qF9WAAZ8Woho,13962
|
|
131
|
-
customer_retention/generators/spec_generator/mlflow_pipeline_generator.py,sha256=
|
|
131
|
+
customer_retention/generators/spec_generator/mlflow_pipeline_generator.py,sha256=LME87sjzP_MjOMA3NTxqRfOhCroUJAb40BAnSH4-I74,29866
|
|
132
132
|
customer_retention/generators/spec_generator/pipeline_spec.py,sha256=c8v1SWgTdeGmNs96l1hOS0qx1B1ua0iwPhw1I5w9OIo,10705
|
|
133
133
|
customer_retention/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
134
|
+
customer_retention/integrations/databricks_init.py,sha256=_JfwTBWJ6czydLR09dMQLKRXpj6PCAPWoFTgUPkx8uE,4660
|
|
134
135
|
customer_retention/integrations/adapters/__init__.py,sha256=Fgdp0ESROTUHnOb2RN9Ubo0A4BdfoenOGuUz61lHz8g,583
|
|
135
136
|
customer_retention/integrations/adapters/base.py,sha256=z6dVAowDKGogKsYGR7VMcLkS6VhcB9h4zgN1tilNYRg,254
|
|
136
|
-
customer_retention/integrations/adapters/factory.py,sha256=
|
|
137
|
+
customer_retention/integrations/adapters/factory.py,sha256=CMsqOeDozADbWnk8fzktZvAyL1FEmUjDMvfDCpLDVaU,1202
|
|
137
138
|
customer_retention/integrations/adapters/feature_store/__init__.py,sha256=KQLLGfgwDOOvC-mhhCpVPIYjh7ruHF07V-cWUWvPfrU,300
|
|
138
|
-
customer_retention/integrations/adapters/feature_store/base.py,sha256=
|
|
139
|
-
customer_retention/integrations/adapters/feature_store/databricks.py,sha256=
|
|
139
|
+
customer_retention/integrations/adapters/feature_store/base.py,sha256=gSvlKOO86XFNxkcPvIVinFKR7v0Vyrsdhq8nmMH6m3o,1911
|
|
140
|
+
customer_retention/integrations/adapters/feature_store/databricks.py,sha256=LFWrYeZhhnelpmXqmjzQHXPs3jbRn1mpF3mktjlsoRU,5783
|
|
140
141
|
customer_retention/integrations/adapters/feature_store/feast_adapter.py,sha256=rEQhLgwEURNsiJF2vsPNlenX5lwghW6ohVrESxoYcWk,4359
|
|
141
142
|
customer_retention/integrations/adapters/feature_store/local.py,sha256=w6H587lHs2DKXpYfLBjIMGR20l_qRURa8Ykd4nanH7I,2995
|
|
142
143
|
customer_retention/integrations/adapters/mlflow/__init__.py,sha256=G6CO9QNzz8XkPjA--_pGda4tXchUAqpNau7YjCD5Qb0,239
|
|
143
|
-
customer_retention/integrations/adapters/mlflow/base.py,sha256=
|
|
144
|
-
customer_retention/integrations/adapters/mlflow/databricks.py,sha256=
|
|
144
|
+
customer_retention/integrations/adapters/mlflow/base.py,sha256=WbonjcL5gM3X5dR4DTuGf0zkPN8xSYn-VWrzLw5DLyU,1026
|
|
145
|
+
customer_retention/integrations/adapters/mlflow/databricks.py,sha256=64vhoOD4dx3oVZdTr7DsU6n1BakSAFGCQgVM3AJ8ENU,2644
|
|
145
146
|
customer_retention/integrations/adapters/mlflow/experiment_tracker.py,sha256=flBO9cXBr4tvw0qobfqGxSKThuL0oQO1L2Qla5oVBdE,7219
|
|
146
|
-
customer_retention/integrations/adapters/mlflow/local.py,sha256=
|
|
147
|
+
customer_retention/integrations/adapters/mlflow/local.py,sha256=uSOg9lVmyPZOJP9xigrlSi4_sswIEHTESep5YGl25Dc,2193
|
|
147
148
|
customer_retention/integrations/adapters/storage/__init__.py,sha256=2WtvUZWX-oyf6dasvaMHzqPCdIQnD2M-bCU88CAznhQ,162
|
|
148
149
|
customer_retention/integrations/adapters/storage/base.py,sha256=C7PRzngbLUGJXIdvjz4_b-EIkOwWLSI7TDgfBGm-sTM,903
|
|
149
150
|
customer_retention/integrations/adapters/storage/databricks.py,sha256=TS0Nf6Fw506nlTHj7mqPaU8sZ3SiMxqtJVDpzcqpZYY,2891
|
|
@@ -228,16 +229,16 @@ customer_retention/stages/profiling/segment_aware_outlier.py,sha256=PS5GXnf_g3D9
|
|
|
228
229
|
customer_retention/stages/profiling/target_level_analyzer.py,sha256=XPhdHqTdK9zzBDqy-JyrTi6NFf07wRwIGsVEOAiR_dE,10491
|
|
229
230
|
customer_retention/stages/profiling/temporal_analyzer.py,sha256=PXf4pYNcszp7N8_14MKFKXDku-fw2M_NLWN7jUsHd1Q,16102
|
|
230
231
|
customer_retention/stages/profiling/temporal_coverage.py,sha256=r23s1qyB7o11ab_TTLOgb4q29OPA_crRshFpMLt4t_w,18561
|
|
231
|
-
customer_retention/stages/profiling/temporal_feature_analyzer.py,sha256=
|
|
232
|
-
customer_retention/stages/profiling/temporal_feature_engineer.py,sha256=
|
|
233
|
-
customer_retention/stages/profiling/temporal_pattern_analyzer.py,sha256
|
|
232
|
+
customer_retention/stages/profiling/temporal_feature_analyzer.py,sha256=LAsIwIO0oM9UzaxsP95OEeOvT-tbLMM6pTfQv_IRe-8,32389
|
|
233
|
+
customer_retention/stages/profiling/temporal_feature_engineer.py,sha256=lmzbixJYDg3rXddrfeyke9_GVKWmiTOONIxhiLWTq_k,27159
|
|
234
|
+
customer_retention/stages/profiling/temporal_pattern_analyzer.py,sha256=G7iX9zyBV-F2uIHZFYY79_6CUmRIww9gwximCk1Ax0M,26850
|
|
234
235
|
customer_retention/stages/profiling/temporal_quality_checks.py,sha256=SosW3omX2c025UIdlXpLEBJCsAsIvoGXMbxw6tzBocA,13750
|
|
235
236
|
customer_retention/stages/profiling/temporal_target_analyzer.py,sha256=eeZlUhTWZfCftwgm_dySi1feRLuoU9SRLL_r_4jgN5g,8785
|
|
236
237
|
customer_retention/stages/profiling/text_embedder.py,sha256=ck7WIq7pGC7xgEzMQr7fYdHcJegYR6wfdh3z32WUiK8,3038
|
|
237
238
|
customer_retention/stages/profiling/text_processor.py,sha256=spdfwVSEU07aYbl2bIsg_INOBt3Js-IA15WVkjf1ask,4474
|
|
238
239
|
customer_retention/stages/profiling/text_reducer.py,sha256=ilSuUAu0dHUyRGTNg8TzoCEd-EAyXKvoAm4uGqwlSQs,2409
|
|
239
|
-
customer_retention/stages/profiling/time_series_profiler.py,sha256=
|
|
240
|
-
customer_retention/stages/profiling/time_window_aggregator.py,sha256=
|
|
240
|
+
customer_retention/stages/profiling/time_series_profiler.py,sha256=XZ2K1v2lI4If6sp-k1jnPQVt6MOvBzorB53IYXhmvok,10358
|
|
241
|
+
customer_retention/stages/profiling/time_window_aggregator.py,sha256=CCfKwh92zAmKupbFcin8t3GDhCEJQ4vW-k5tcZgZsfw,15938
|
|
241
242
|
customer_retention/stages/profiling/type_detector.py,sha256=VgYHWcBGepyJKNdY1FKgb9scOaosN6fDY_-WiTjfoAg,14726
|
|
242
243
|
customer_retention/stages/profiling/window_recommendation.py,sha256=Apd_PDFpo49HJJzldTcwzzgJjBzEfd8mbGboBwHhzGw,13354
|
|
243
244
|
customer_retention/stages/temporal/__init__.py,sha256=f86XiSUMKQgeTLyOsu89IJcafOPjdBIR9bH_hhrY8b8,6135
|
|
@@ -276,27 +277,27 @@ customer_retention/transforms/artifact_store.py,sha256=FYLpDcv2N6-dUTX5RPEIK3aCW
|
|
|
276
277
|
customer_retention/transforms/executor.py,sha256=oML5dCidxbW_q6YUkAwWcutYP6bIFB6IdD3BvemK45A,6304
|
|
277
278
|
customer_retention/transforms/fitted.py,sha256=3pNvnae-P3t3bKMeZz1Bl0xww-feapIYdoeTY6aUtI8,3278
|
|
278
279
|
customer_retention/transforms/ops.py,sha256=Xg2g9UOOudq_y9Hf3oWsjpqw3dEoykQR5pDSoyW8GX0,4294
|
|
279
|
-
churnkit-0.
|
|
280
|
-
churnkit-0.
|
|
281
|
-
churnkit-0.
|
|
282
|
-
churnkit-0.
|
|
283
|
-
churnkit-0.
|
|
284
|
-
churnkit-0.
|
|
285
|
-
churnkit-0.
|
|
286
|
-
churnkit-0.
|
|
287
|
-
churnkit-0.
|
|
288
|
-
churnkit-0.
|
|
289
|
-
churnkit-0.
|
|
290
|
-
churnkit-0.
|
|
291
|
-
churnkit-0.
|
|
292
|
-
churnkit-0.
|
|
293
|
-
churnkit-0.
|
|
294
|
-
churnkit-0.
|
|
295
|
-
churnkit-0.
|
|
296
|
-
churnkit-0.
|
|
297
|
-
churnkit-0.
|
|
298
|
-
churnkit-0.
|
|
299
|
-
churnkit-0.
|
|
300
|
-
churnkit-0.
|
|
301
|
-
churnkit-0.
|
|
302
|
-
churnkit-0.
|
|
280
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/00_start_here.ipynb,sha256=zCyhftEd3v9fc0Ta6wvA6b-9LcoGzRi8bS1tMZ3iu9w,21911
|
|
281
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01_data_discovery.ipynb,sha256=up0X3oDJ5sAo1-tbqMyZj_f1h6D542G2uAxjVmtYCOI,46430
|
|
282
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01a_a_temporal_text_deep_dive.ipynb,sha256=uai8T3iJSqOrabBQnVi8Z0k8zZGVgs_VVQWRHyXN8QU,33690
|
|
283
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01a_temporal_deep_dive.ipynb,sha256=fC1ASNtvI8X1lAe-Lzcw3oX2cptDC-ymPeEtKKWhg20,67326
|
|
284
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01b_temporal_quality.ipynb,sha256=RU5hxgrTVMZs1ytChVv1t49WpTO0Oj6B_Fu8g0xS0To,23039
|
|
285
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01c_temporal_patterns.ipynb,sha256=ZGYfztP6JhOEwPmTYdC0l7w579fKXcNEJXq-PnCLc2I,153167
|
|
286
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/01d_event_aggregation.ipynb,sha256=-FT3SoBU0fhaZxGeTo-_UQl6riCrtoJaFnUg31opk64,63244
|
|
287
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/02_column_deep_dive.ipynb,sha256=mbP2LQWsXDyTsWg0bhrCBHEfHsEer_XOXRYV9f8JxAk,60250
|
|
288
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/02a_text_columns_deep_dive.ipynb,sha256=M9YN8yAjjuC6ZaUlc-rVqVLEkWd7Rc_GNILHS9qO3PU,29704
|
|
289
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/03_quality_assessment.ipynb,sha256=H49LLmn1PHbcbAvSQfteESRGk125QwkPI5qbLk3yZgc,68595
|
|
290
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/04_relationship_analysis.ipynb,sha256=Rr-B4-xg0ILuAIgztlZkiGJdTzLuNjOqBFxO8W4o9iU,78624
|
|
291
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/05_multi_dataset.ipynb,sha256=bBxkuZyTl1yZg4kMXO87WRjgZMhj_6hwLGX6m3XC270,62664
|
|
292
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/06_feature_opportunities.ipynb,sha256=cBJF5o4z3Z-dustQ4CVklnfTcQ8saG97tlgswWK9uWE,67409
|
|
293
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/07_modeling_readiness.ipynb,sha256=IiA04fyb-l097Glp3MtR03vPjQsZlS1Icg-hjEHa_Dg,28376
|
|
294
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/08_baseline_experiments.ipynb,sha256=KmjhnDf1JdpEiIcdfQ-ZFo_at6t9JRC30B6NmmvMBmg,34226
|
|
295
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/09_business_alignment.ipynb,sha256=tMNfGM7AH50N1ONzHhGW2HZLpQwraIxVzOiVnI-10X8,17214
|
|
296
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/10_spec_generation.ipynb,sha256=KeUdfL9Mvdi6023XpnfZ6oLEDNZaWiIHUfsAWig24mE,42847
|
|
297
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/11_scoring_validation.ipynb,sha256=5fi3eHMm03ZKZgdFAXMgydtZ3qX2TtR3L9bZS2MpWPE,49937
|
|
298
|
+
churnkit-0.76.0a1.data/data/share/churnkit/exploration_notebooks/12_view_documentation.ipynb,sha256=aQF7CG8HxckqUKOKqnmZgMkSvfVzyO2LlYPrymLYjBY,4405
|
|
299
|
+
churnkit-0.76.0a1.dist-info/METADATA,sha256=GJWHc_bnex7Wf2T8IfDd7SjfBFE3aS-ZgMXoNi82_R0,13005
|
|
300
|
+
churnkit-0.76.0a1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
301
|
+
churnkit-0.76.0a1.dist-info/entry_points.txt,sha256=swQFVe-jjgQSBJQNO2Ulkz2F5odaE-TsnlTor3HQBjw,70
|
|
302
|
+
churnkit-0.76.0a1.dist-info/licenses/LICENSE,sha256=Bud8Oj25tnpoIuXCWW0xcSfmGPeEZAAHrDRoKdSYtZY,11344
|
|
303
|
+
churnkit-0.76.0a1.dist-info/RECORD,,
|
customer_retention/__init__.py
CHANGED
|
@@ -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",
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
from .column_config import ColumnConfig, ColumnType, DatasetGranularity
|
|
2
2
|
from .experiments import (
|
|
3
|
+
CATALOG,
|
|
3
4
|
DATA_DIR,
|
|
5
|
+
EXPERIMENT_NAME,
|
|
4
6
|
EXPERIMENTS_DIR,
|
|
5
7
|
FEATURE_STORE_DIR,
|
|
6
8
|
FINDINGS_DIR,
|
|
7
9
|
MLRUNS_DIR,
|
|
8
10
|
OUTPUT_DIR,
|
|
11
|
+
SCHEMA,
|
|
12
|
+
WORKSPACE_PATH,
|
|
13
|
+
get_catalog,
|
|
9
14
|
get_data_dir,
|
|
15
|
+
get_experiment_name,
|
|
10
16
|
get_experiments_dir,
|
|
11
17
|
get_feature_store_dir,
|
|
12
18
|
get_findings_dir,
|
|
13
19
|
get_mlruns_dir,
|
|
14
20
|
get_notebook_experiments_dir,
|
|
21
|
+
get_schema,
|
|
22
|
+
get_workspace_path,
|
|
15
23
|
setup_experiments_structure,
|
|
16
24
|
)
|
|
17
25
|
from .pipeline_config import (
|
|
@@ -27,13 +35,40 @@ from .pipeline_config import (
|
|
|
27
35
|
from .source_config import DataSourceConfig, FileFormat, Grain, SourceType
|
|
28
36
|
|
|
29
37
|
__all__ = [
|
|
30
|
-
"ColumnType",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
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",
|
|
38
73
|
"setup_experiments_structure",
|
|
39
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:
|