upgini 1.2.167a4220.dev4__tar.gz → 1.2.167a4220.dev5__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.
Files changed (94) hide show
  1. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/PKG-INFO +1 -1
  2. upgini-1.2.167a4220.dev5/src/upgini/__about__.py +1 -0
  3. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/features_enricher.py +3 -0
  4. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/html.py +1 -1
  5. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/stats.py +10 -3
  6. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/template.html +2 -2
  7. upgini-1.2.167a4220.dev4/src/upgini/__about__.py +0 -1
  8. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/.gitignore +0 -0
  9. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/LICENSE +0 -0
  10. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/README.md +0 -0
  11. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/pyproject.toml +0 -0
  12. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/__init__.py +0 -0
  13. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/ads.py +0 -0
  14. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/ads_management/__init__.py +0 -0
  15. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/ads_management/ads_manager.py +0 -0
  16. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/__init__.py +0 -0
  17. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/all_operators.py +0 -0
  18. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/binary.py +0 -0
  19. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/date.py +0 -0
  20. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/feature.py +0 -0
  21. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/groupby.py +0 -0
  22. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/operand.py +0 -0
  23. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/operator.py +0 -0
  24. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/__init__.py +0 -0
  25. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/base.py +0 -0
  26. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/cross.py +0 -0
  27. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/delta.py +0 -0
  28. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/lag.py +0 -0
  29. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/numpy_kernels.py +0 -0
  30. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/roll.py +0 -0
  31. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/trend.py +0 -0
  32. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/timeseries/volatility.py +0 -0
  33. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/unary.py +0 -0
  34. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/utils.py +0 -0
  35. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/autofe/vector.py +0 -0
  36. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/data_source/__init__.py +0 -0
  37. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/data_source/data_source_publisher.py +0 -0
  38. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/dataset.py +0 -0
  39. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/errors.py +0 -0
  40. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/http.py +0 -0
  41. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/mdc/__init__.py +0 -0
  42. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/mdc/context.py +0 -0
  43. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/metadata.py +0 -0
  44. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/metrics.py +0 -0
  45. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/normalizer/__init__.py +0 -0
  46. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/normalizer/normalize_utils.py +0 -0
  47. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/__init__.py +0 -0
  48. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/assemble.py +0 -0
  49. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/report/data.py +0 -0
  50. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/resource_bundle/__init__.py +0 -0
  51. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/resource_bundle/exceptions.py +0 -0
  52. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/resource_bundle/strings.properties +0 -0
  53. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/resource_bundle/strings_widget.properties +0 -0
  54. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/sampler/__init__.py +0 -0
  55. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/sampler/base.py +0 -0
  56. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/sampler/random_under_sampler.py +0 -0
  57. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/sampler/utils.py +0 -0
  58. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/search_task.py +0 -0
  59. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/spinner.py +0 -0
  60. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/Roboto-Regular.ttf +0 -0
  61. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/__init__.py +0 -0
  62. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/base_search_key_detector.py +0 -0
  63. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/blocked_time_series.py +0 -0
  64. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/config.py +0 -0
  65. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/country_utils.py +0 -0
  66. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/cpu_utils.py +0 -0
  67. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/custom_loss_utils.py +0 -0
  68. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/cv_utils.py +0 -0
  69. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/datetime_utils.py +0 -0
  70. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/deduplicate_utils.py +0 -0
  71. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/display_utils.py +0 -0
  72. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/email_utils.py +0 -0
  73. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/fallback_progress_bar.py +0 -0
  74. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/feature_info.py +0 -0
  75. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/features_validator.py +0 -0
  76. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/format.py +0 -0
  77. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/hash_utils.py +0 -0
  78. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/ip_utils.py +0 -0
  79. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/mstats.py +0 -0
  80. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/one_hot_encoder.py +0 -0
  81. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/phone_utils.py +0 -0
  82. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/postal_code_utils.py +0 -0
  83. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/progress_bar.py +0 -0
  84. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/psi.py +0 -0
  85. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/pyarrow_utils.py +0 -0
  86. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/sample_utils.py +0 -0
  87. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/search_key_derivations.py +0 -0
  88. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/sklearn_ext.py +0 -0
  89. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/sort.py +0 -0
  90. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/target_utils.py +0 -0
  91. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/track_info.py +0 -0
  92. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/ts_utils.py +0 -0
  93. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/utils/warning_counter.py +0 -0
  94. {upgini-1.2.167a4220.dev4 → upgini-1.2.167a4220.dev5}/src/upgini/version_validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: upgini
3
- Version: 1.2.167a4220.dev4
3
+ Version: 1.2.167a4220.dev5
4
4
  Summary: Intelligent data search & enrichment for Machine Learning
5
5
  Project-URL: Bug Reports, https://github.com/upgini/upgini/issues
6
6
  Project-URL: Homepage, https://upgini.com/
@@ -0,0 +1 @@
1
+ __version__ = "1.2.167.a4220.dev5"
@@ -1462,6 +1462,9 @@ class FeaturesEnricher(TransformerMixin):
1462
1462
  progress_bar: bool = True,
1463
1463
  progress_callback: Callable | None = None,
1464
1464
  ):
1465
+ if self._has_single_ensemble_score():
1466
+ self.logger.info("Skip OOT PSI stability check for single ensemble score")
1467
+ return
1465
1468
  search_keys = self.search_keys.copy()
1466
1469
  search_keys.update(self._get_autodetected_search_keys())
1467
1470
  validated_X, _, validated_eval_set = self._validate_train_eval(X, y, eval_set)
@@ -79,7 +79,7 @@ def _samples(data: ReportData) -> list[dict]:
79
79
  {
80
80
  "id": _slug(name),
81
81
  "label": name,
82
- "caption": "",
82
+ "caption": "OOF validation" if index == 0 else "",
83
83
  "color": _SAMPLE_COLORS[index % len(_SAMPLE_COLORS)],
84
84
  }
85
85
  for index, name in enumerate(names)
@@ -344,10 +344,17 @@ def _score_psi(names: list[str], scored_samples: dict[str, pd.DataFrame], timeli
344
344
  if not timeline or not scored_samples:
345
345
  return []
346
346
  train = scored_samples.get(names[0]) if names else None
347
- if train is None or SCORE not in train.columns:
347
+ if train is None or SCORE not in train.columns or DATE not in train.columns:
348
348
  return []
349
- reference = pd.to_numeric(train[SCORE], errors="coerce").dropna()
350
- if reference.empty:
349
+ train_scores = pd.to_numeric(train[SCORE], errors="coerce")
350
+ train_months = _month_keys(train[DATE])
351
+ reference = None
352
+ for month in timeline:
353
+ month_scores = train_scores[train_months == month].dropna()
354
+ if not month_scores.empty:
355
+ reference = month_scores
356
+ break
357
+ if reference is None:
351
358
  return []
352
359
  bins = _get_bin_edges(reference, HISTOGRAM_BINS)
353
360
  rows = []
@@ -71,7 +71,7 @@
71
71
  </section>
72
72
 
73
73
  <section id="score-stability" class="section">
74
- <div class="section-head"><div><h2>Score stability (PSI)</h2><p>Monthly PSI of scores · reference: full Train distribution · fixed reference bins.</p></div><div class="toolbar"><select id="psiSample" class="control" aria-label="Score stability sample"></select><button class="button ghost chart-export" data-chart="scorePsiChart">Save PNG</button></div></div>
74
+ <div class="section-head"><div><h2>Score stability (PSI)</h2><p>Monthly PSI of scores · reference: first period (baseline month) · fixed reference bins.</p></div><div class="toolbar"><select id="psiSample" class="control" aria-label="Score stability sample"></select><button class="button ghost chart-export" data-chart="scorePsiChart">Save PNG</button></div></div>
75
75
  <div class="panel chart-panel"><div class="threshold-legend" id="psiThresholdLegend"></div><div class="canvas-wrap"><canvas id="scorePsiChart" aria-label="Monthly score PSI" width="1596" height="560"></canvas><div class="chart-tooltip" id="psiTooltip"></div></div></div>
76
76
  </section>
77
77
 
@@ -628,7 +628,7 @@ const REPORT_DATA = __REPORT_DATA__;
628
628
  bindTooltip('scorePsiChart', 'psiTooltip', 'psi', i => {
629
629
  const cfg = D.scoreStability, s = cfg.bySample[document.getElementById('psiSample').value];
630
630
  return `<b>${MONTHS[i]} · ${selectedLabel('psiSample')}</b><br>PSI: ${fmt3(s.psi[i])}` +
631
- `<br>Rows: ${num(s.rows[i])}<br>Score coverage: ${s.scoreCoverage[i].toFixed(1)}%<br>Reference: full Train distribution`;
631
+ `<br>Rows: ${num(s.rows[i])}<br>Score coverage: ${s.scoreCoverage[i].toFixed(1)}%<br>Reference: first period (baseline month)`;
632
632
  });
633
633
  bindTooltip('featureStabilityChart', 'featureTooltip', 'feature', i => {
634
634
  const cfg = D.featureStability, f = currentStabilityFeature(), s = cfg.bySample[f.name];
@@ -1 +0,0 @@
1
- __version__ = "1.2.167.a4220.dev4"