4545
4646
4747@log_adapter .class_logger
48- class ARIMAPlus (base .SupervisedTrainablePredictor ):
48+ class ARIMAPlus (base .SupervisedTrainableWithIdColPredictor ):
4949 """Time Series ARIMA Plus model.
5050
5151 Args:
@@ -183,37 +183,53 @@ def _fit(
183183 X : utils .ArrayType ,
184184 y : utils .ArrayType ,
185185 transforms : Optional [List [str ]] = None ,
186- ):
186+ id_col : Optional [utils .ArrayType ] = None ,
187+ ) -> ARIMAPlus :
187188 """Fit the model to training data.
188189
189190 Args:
190- X (bigframes.dataframe.DataFrame or bigframes.series.Series):
191- A dataframe of training timestamp.
192-
193- y (bigframes.dataframe.DataFrame or bigframes.series.Series):
191+ X (bigframes.dataframe.DataFrame or bigframes.series.Series,
192+ or pandas.core.frame.DataFrame or pandas.core.series.Series):
193+ A dataframe or series of trainging timestamp.
194+ y (bigframes.dataframe.DataFrame, or bigframes.series.Series,
195+ or pandas.core.frame.DataFrame, or pandas.core.series.Series):
194196 Target values for training.
195197 transforms (Optional[List[str]], default None):
196198 Do not use. Internal param to be deprecated.
197199 Use bigframes.ml.pipeline instead.
200+ id_col (Optional[bigframes.dataframe.DataFrame]
201+ or Optional[bigframes.series.Series]
202+ or Optional[pandas.core.frame.DataFrame]
203+ or Optional[pandas.core.frame.Series]
204+ or None, default None):
205+ An optional dataframe or series of training id col.
198206
199207 Returns:
200208 ARIMAPlus: Fitted estimator.
201209 """
202210 X , y = utils .batch_convert_to_dataframe (X , y )
203211
204212 if X .columns .size != 1 :
205- raise ValueError (
206- "Time series timestamp input X must only contain 1 column."
207- )
213+ raise ValueError ("Time series timestamp input X contain at least 1 column." )
208214 if y .columns .size != 1 :
209215 raise ValueError ("Time series data input y must only contain 1 column." )
210216
217+ if id_col is not None :
218+ (id_col ,) = utils .batch_convert_to_dataframe (id_col )
219+
220+ if id_col .columns .size != 1 :
221+ raise ValueError (
222+ "Time series id input id_col must only contain 1 column."
223+ )
224+
211225 self ._bqml_model = self ._bqml_model_factory .create_time_series_model (
212226 X ,
213227 y ,
228+ id_col = id_col ,
214229 transforms = transforms ,
215230 options = self ._bqml_options ,
216231 )
232+ return self
217233
218234 def predict (
219235 self , X = None , * , horizon : int = 3 , confidence_level : float = 0.95
@@ -237,7 +253,7 @@ def predict(
237253
238254 Returns:
239255 bigframes.dataframe.DataFrame: The predicted DataFrames. Which
240- contains 2 columns: "forecast_timestamp" and "forecast_value".
256+ contains 2 columns: "forecast_timestamp", "id" as optional, and "forecast_value".
241257 """
242258 if horizon < 1 or horizon > 1000 :
243259 raise ValueError (f"horizon must be [1, 1000], but is { horizon } ." )
@@ -345,6 +361,7 @@ def score(
345361 self ,
346362 X : utils .ArrayType ,
347363 y : utils .ArrayType ,
364+ id_col : Optional [utils .ArrayType ] = None ,
348365 ) -> bpd .DataFrame :
349366 """Calculate evaluation metrics of the model.
350367
@@ -355,13 +372,22 @@ def score(
355372 for the outputs relevant to this model type.
356373
357374 Args:
358- X (bigframes.dataframe.DataFrame or bigframes.series.Series or pandas.core.frame.DataFrame or pandas.core.series.Series):
359- A BigQuery DataFrame only contains 1 column as
375+ X (bigframes.dataframe.DataFrame or bigframes.series.Series
376+ or pandas.core.frame.DataFrame or pandas.core.series.Series):
377+ A dataframe or series only contains 1 column as
360378 evaluation timestamp. The timestamp must be within the horizon
361379 of the model, which by default is 1000 data points.
362- y (bigframes.dataframe.DataFrame or bigframes.series.Series or pandas.core.frame.DataFrame or pandas.core.series.Series):
363- A BigQuery DataFrame only contains 1 column as
380+ y (bigframes.dataframe.DataFrame or bigframes.series.Series
381+ or pandas.core.frame.DataFrame or pandas.core.series.Series):
382+ A dataframe or series only contains 1 column as
364383 evaluation numeric values.
384+ id_col (Optional[bigframes.dataframe.DataFrame]
385+ or Optional[bigframes.series.Series]
386+ or Optional[pandas.core.frame.DataFrame]
387+ or Optional[pandas.core.series.Series]
388+ or None, default None):
389+ An optional dataframe or series contains at least 1 column as
390+ evaluation id column.
365391
366392 Returns:
367393 bigframes.dataframe.DataFrame: A DataFrame as evaluation result.
@@ -371,6 +397,10 @@ def score(
371397 X , y = utils .batch_convert_to_dataframe (X , y , session = self ._bqml_model .session )
372398
373399 input_data = X .join (y , how = "outer" )
400+ if id_col is not None :
401+ (id_col ,) = utils .batch_convert_to_dataframe (id_col )
402+ input_data = input_data .join (id_col , how = "outer" )
403+
374404 return self ._bqml_model .evaluate (input_data )
375405
376406 def summary (
0 commit comments