@sipemu/anofox-forecast 0.4.7 → 0.4.8

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.
package/README.md CHANGED
@@ -278,10 +278,23 @@ model.fit(ts);
278
278
  const forecast = model.predict(10);
279
279
  ```
280
280
 
281
+ ## What's New in the Rust Crate (v0.4.8)
282
+
283
+ These features are available in the Rust crate but not yet exposed as WASM bindings:
284
+
285
+ - **Per-horizon-step conformal prediction** — separate interval widths per forecast step
286
+ - **Bootstrap prediction intervals** — model-agnostic residual resampling with cumulative error paths
287
+ - **Calendar feature engineering** — cyclical sin/cos encoding, binary indicators (weekend, month-end, etc.)
288
+ - **Future timestamp generation** — calendar-aware (`generate_future_timestamps`)
289
+ - **Auto-lag selection** for RegressionForecaster (BIC/AIC)
290
+ - **Differencing** for RegressionForecaster (regular + seasonal)
291
+ - **Reworked cross-validation** — backward-anchored folds, n_folds-driven
292
+
281
293
  ## Limitations
282
294
 
283
295
  - The `parallel` feature from the Rust crate is not available in WASM
284
296
  - IDR (Isotonic Distributional Regression) and QRA are not yet exposed in WASM
297
+ - Per-step conformal, bootstrap predictor, and calendar features are Rust-only (not yet in WASM)
285
298
 
286
299
  ## License
287
300
 
@@ -150,12 +150,6 @@ export class AutoForecastBuilder {
150
150
  * @param period - Seasonal period (e.g., 12 for monthly data)
151
151
  */
152
152
  seasonalPeriod(period: number): AutoForecastBuilder;
153
- /**
154
- * Use cross-validation instead of in-sample MSE for model selection.
155
- *
156
- * @param useCv - Whether to use cross-validation (default: false)
157
- */
158
- useCrossValidation(use_cv: boolean): AutoForecastBuilder;
159
153
  /**
160
154
  * Create a new builder with all defaults enabled.
161
155
  */
@@ -184,9 +178,8 @@ export class AutoForecaster {
184
178
  * @param includeArima - Include AutoARIMA candidate (default: true)
185
179
  * @param includeEts - Include AutoETS candidate (default: true)
186
180
  * @param includeTheta - Include AutoTheta candidate (default: true)
187
- * @param useCrossValidation - Use cross-validation instead of in-sample MSE (default: false)
188
181
  */
189
- static withConfig(seasonal_period?: number | null, include_arima?: boolean | null, include_ets?: boolean | null, include_theta?: boolean | null, use_cross_validation?: boolean | null): AutoForecaster;
182
+ static withConfig(seasonal_period?: number | null, include_arima?: boolean | null, include_ets?: boolean | null, include_theta?: boolean | null): AutoForecaster;
190
183
  /**
191
184
  * Get the name of the selected model.
192
185
  *
@@ -213,7 +206,7 @@ export class AutoForecaster {
213
206
  * Create a new AutoForecaster with default configuration.
214
207
  *
215
208
  * By default, includes AutoARIMA, AutoETS, and AutoTheta candidates
216
- * and uses in-sample MSE for model selection.
209
+ * and uses cross-validation for model selection.
217
210
  */
218
211
  constructor();
219
212
  /**
@@ -1725,7 +1718,6 @@ export interface InitOutput {
1725
1718
  readonly autoforecastbuilder_includeTheta: (a: number, b: number) => number;
1726
1719
  readonly autoforecastbuilder_new: () => number;
1727
1720
  readonly autoforecastbuilder_seasonalPeriod: (a: number, b: number) => number;
1728
- readonly autoforecastbuilder_useCrossValidation: (a: number, b: number) => number;
1729
1721
  readonly autoforecaster_allScores: (a: number) => [number, number, number];
1730
1722
  readonly autoforecaster_fit: (a: number, b: number) => [number, number];
1731
1723
  readonly autoforecaster_name: (a: number) => [number, number];
@@ -1734,7 +1726,7 @@ export interface InitOutput {
1734
1726
  readonly autoforecaster_predictWithIntervals: (a: number, b: number, c: number) => [number, number, number];
1735
1727
  readonly autoforecaster_seasonal: (a: number) => number;
1736
1728
  readonly autoforecaster_selectedModelName: (a: number) => [number, number];
1737
- readonly autoforecaster_withConfig: (a: number, b: number, c: number, d: number, e: number) => number;
1729
+ readonly autoforecaster_withConfig: (a: number, b: number, c: number, d: number) => number;
1738
1730
  readonly autotbatsforecaster_fit: (a: number, b: number) => [number, number];
1739
1731
  readonly autotbatsforecaster_name: (a: number) => [number, number];
1740
1732
  readonly autotbatsforecaster_new: (a: number, b: number) => number;
@@ -698,7 +698,7 @@ if (Symbol.dispose) AutoETSForecaster.prototype[Symbol.dispose] = AutoETSForecas
698
698
  /**
699
699
  * Automatic ensemble that selects top-K models across families.
700
700
  *
701
- * Fits AutoARIMA, AutoETS, and AutoTheta, ranks them by in-sample MSE,
701
+ * Fits AutoARIMA, AutoETS, and AutoTheta, ranks them by cross-validation error,
702
702
  * and combines the top-K into a weighted ensemble forecast.
703
703
  */
704
704
  export class AutoEnsembleForecaster {
@@ -913,18 +913,6 @@ export class AutoForecastBuilder {
913
913
  const ret = wasm.autoforecastbuilder_seasonalPeriod(ptr, period);
914
914
  return AutoForecastBuilder.__wrap(ret);
915
915
  }
916
- /**
917
- * Use cross-validation instead of in-sample MSE for model selection.
918
- *
919
- * @param useCv - Whether to use cross-validation (default: false)
920
- * @param {boolean} use_cv
921
- * @returns {AutoForecastBuilder}
922
- */
923
- useCrossValidation(use_cv) {
924
- const ptr = this.__destroy_into_raw();
925
- const ret = wasm.autoforecastbuilder_useCrossValidation(ptr, use_cv);
926
- return AutoForecastBuilder.__wrap(ret);
927
- }
928
916
  /**
929
917
  * Create a new builder with all defaults enabled.
930
918
  */
@@ -952,7 +940,7 @@ if (Symbol.dispose) AutoForecastBuilder.prototype[Symbol.dispose] = AutoForecast
952
940
  * Automatic model selection across ARIMA, ETS, and Theta families.
953
941
  *
954
942
  * Fits all enabled auto models and selects the best one based on
955
- * in-sample MSE or cross-validation error.
943
+ * cross-validation error.
956
944
  */
957
945
  export class AutoForecaster {
958
946
  static __wrap(ptr) {
@@ -992,16 +980,14 @@ export class AutoForecaster {
992
980
  * @param includeArima - Include AutoARIMA candidate (default: true)
993
981
  * @param includeEts - Include AutoETS candidate (default: true)
994
982
  * @param includeTheta - Include AutoTheta candidate (default: true)
995
- * @param useCrossValidation - Use cross-validation instead of in-sample MSE (default: false)
996
983
  * @param {number | null} [seasonal_period]
997
984
  * @param {boolean | null} [include_arima]
998
985
  * @param {boolean | null} [include_ets]
999
986
  * @param {boolean | null} [include_theta]
1000
- * @param {boolean | null} [use_cross_validation]
1001
987
  * @returns {AutoForecaster}
1002
988
  */
1003
- static withConfig(seasonal_period, include_arima, include_ets, include_theta, use_cross_validation) {
1004
- const ret = wasm.autoforecaster_withConfig(isLikeNone(seasonal_period) ? 0x100000001 : (seasonal_period) >>> 0, isLikeNone(include_arima) ? 0xFFFFFF : include_arima ? 1 : 0, isLikeNone(include_ets) ? 0xFFFFFF : include_ets ? 1 : 0, isLikeNone(include_theta) ? 0xFFFFFF : include_theta ? 1 : 0, isLikeNone(use_cross_validation) ? 0xFFFFFF : use_cross_validation ? 1 : 0);
989
+ static withConfig(seasonal_period, include_arima, include_ets, include_theta) {
990
+ const ret = wasm.autoforecaster_withConfig(isLikeNone(seasonal_period) ? 0x100000001 : (seasonal_period) >>> 0, isLikeNone(include_arima) ? 0xFFFFFF : include_arima ? 1 : 0, isLikeNone(include_ets) ? 0xFFFFFF : include_ets ? 1 : 0, isLikeNone(include_theta) ? 0xFFFFFF : include_theta ? 1 : 0);
1005
991
  return AutoForecaster.__wrap(ret);
1006
992
  }
1007
993
  /**
@@ -1055,7 +1041,7 @@ export class AutoForecaster {
1055
1041
  * Create a new AutoForecaster with default configuration.
1056
1042
  *
1057
1043
  * By default, includes AutoARIMA, AutoETS, and AutoTheta candidates
1058
- * and uses in-sample MSE for model selection.
1044
+ * and uses cross-validation for model selection.
1059
1045
  */
1060
1046
  constructor() {
1061
1047
  const ret = wasm.autoforecaster_new();
Binary file
@@ -89,7 +89,6 @@ export const autoforecastbuilder_includeEts: (a: number, b: number) => number;
89
89
  export const autoforecastbuilder_includeTheta: (a: number, b: number) => number;
90
90
  export const autoforecastbuilder_new: () => number;
91
91
  export const autoforecastbuilder_seasonalPeriod: (a: number, b: number) => number;
92
- export const autoforecastbuilder_useCrossValidation: (a: number, b: number) => number;
93
92
  export const autoforecaster_allScores: (a: number) => [number, number, number];
94
93
  export const autoforecaster_fit: (a: number, b: number) => [number, number];
95
94
  export const autoforecaster_name: (a: number) => [number, number];
@@ -98,7 +97,7 @@ export const autoforecaster_predict: (a: number, b: number) => [number, number,
98
97
  export const autoforecaster_predictWithIntervals: (a: number, b: number, c: number) => [number, number, number];
99
98
  export const autoforecaster_seasonal: (a: number) => number;
100
99
  export const autoforecaster_selectedModelName: (a: number) => [number, number];
101
- export const autoforecaster_withConfig: (a: number, b: number, c: number, d: number, e: number) => number;
100
+ export const autoforecaster_withConfig: (a: number, b: number, c: number, d: number) => number;
102
101
  export const autotbatsforecaster_fit: (a: number, b: number) => [number, number];
103
102
  export const autotbatsforecaster_name: (a: number) => [number, number];
104
103
  export const autotbatsforecaster_new: (a: number, b: number) => number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sipemu/anofox-forecast",
3
- "version": "0.4.7",
3
+ "version": "0.4.8",
4
4
  "description": "Time series forecasting library - WebAssembly bindings for anofox-forecast",
5
5
  "type": "module",
6
6
  "main": "anofox_forecast_js.js",