deepcausalmmm.core.scaling

Simple, proven scaling implementation that works reliably. Based on the successful approach from dashboard_rmse_optimized.py.

Classes

GlobalScaler

SimpleGlobalScaler([config])

Linear scaling approach (y/y_mean) for additive attribution.

SimpleScalingParams(control_mean, control_std)

Store simple global scaling parameters.

class deepcausalmmm.core.scaling.SimpleScalingParams(control_mean: Tensor, control_std: Tensor, total_impressions: Tensor | None = None)[source]

Store simple global scaling parameters.

control_mean: Tensor
control_std: Tensor
total_impressions: Tensor | None = None
__init__(control_mean: Tensor, control_std: Tensor, total_impressions: Tensor | None = None) None
class deepcausalmmm.core.scaling.SimpleGlobalScaler(config: Dict[str, Any] | None = None)[source]

Linear scaling approach (y/y_mean) for additive attribution.

Scaling features: - Media: Share-of-voice scaling with outlier smoothing - Control: Robust standardization with adaptive clipping - Target: Linear scaling by region mean (y/y_mean) for additive decomposition - Adaptive normalization with distribution-aware clipping - Advanced outlier handling for extreme value stability

__init__(config: Dict[str, Any] | None = None)[source]

Initialize the scaler with optional config parameters.

fit(X_media: ndarray, X_control: ndarray, y: ndarray) None[source]

Fit the scaler using simple global statistics.

Parameters:
  • X_media – Media variables [n_regions, n_timesteps, n_channels]

  • X_control – Control variables [n_regions, n_timesteps, n_controls]

  • y – Target variable [n_regions, n_timesteps]

transform(X_media: ndarray, X_control: ndarray, y: ndarray) Tuple[Tensor, Tensor, Tensor][source]

Transform data using fitted parameters.

Parameters:
  • X_media – Media variables [n_regions, n_timesteps, n_channels]

  • X_control – Control variables [n_regions, n_timesteps, n_controls]

  • y – Target variable [n_regions, n_timesteps]

Returns:

Tuple of (X_media_scaled, X_control_scaled, y_scaled)

inverse_transform_target(y_scaled: Tensor) Tensor[source]

Inverse transform target variable.

Parameters:

y_scaled – Scaled target [n_regions, n_timesteps]

Returns:

Original scale target

inverse_transform_contributions(media_contributions: Tensor, baseline: Tensor = None, control_contributions: Tensor = None, seasonal_contributions: Tensor = None, trend_contributions: Tensor = None, prediction_scale: Tensor = None) dict[source]

Inverse transform ALL contributions to original scale using simple multiplication.

With linear scaling (y/y_mean), the inverse transform is straightforward: component_orig = component_scaled * prediction_scale * y_mean_per_region

This preserves additivity: sum(components_orig) = prediction_orig

Parameters:
  • media_contributions – Media contributions in scaled space [regions, timesteps, channels]

  • baseline – Baseline in scaled space [regions, timesteps]

  • control_contributions – Control contributions in scaled space [regions, timesteps, controls]

  • seasonal_contributions – Seasonal contributions in scaled space [regions, timesteps]

  • trend_contributions – Trend contributions in scaled space [regions, timesteps]

  • prediction_scale – Model’s prediction_scale factor (from F.softplus(self.prediction_scale))

Returns:

Dictionary with all contributions in original scale

fit_transform(X_media: ndarray, X_control: ndarray, y: ndarray) Tuple[Tensor, Tensor, Tensor][source]

Fit the scaler and transform data in one step.

Parameters:
  • X_media – Media variables [n_regions, n_timesteps, n_channels]

  • X_control – Control variables [n_regions, n_timesteps, n_controls]

  • y – Target variable [n_regions, n_timesteps]

Returns:

Tuple of (X_media_scaled, X_control_scaled, y_scaled)

deepcausalmmm.core.scaling.GlobalScaler

alias of SimpleGlobalScaler