함수 기반 시계열
함수 기반 시계열은 Python 함수가 만든 숫자형 시계열을 별도 동기화 없이 Foundry에서 사용하는 방식입니다. Quiver가 설정한 인자로 함수를 호출하여 직렬화된 시계열을 받고, 재표본화, 수식, 조인과 시계열 검색 같은 연산에 연결합니다.
활용 범위
Prophet, statsmodels 또는 자체 모델로 예측과 시뮬레이션을 만들 수 있습니다. 외부 API 및 서비스의 데이터를 미리 구체화하지 않고 조회하는 함수나 여러 센서의 결과를 결합한 분석도 구성할 수 있습니다. 제어 설정과 예측 구간을 함수 인자로 두면 여러 시나리오를 나란히 비교할 수 있습니다.
결과 캐시와 큰 출력을 다루는 스트리밍 실행을 활용합니다. 중간 데이터셋을 관리하지 않고 모델을 바꾸어 조회하는 경로이며, 코드의 실제 실행 환경과 데이터 접근 권한은 함수의 조건을 따릅니다.
다음 화면은 기계 제어 설정에 따라 주간 예측을 비교하는 Workshop 예시입니다.
Prophet 예제
이 예제는 생성된 Machine 모델에 숫자형 performance_score TSP가 있다는 전제를 사용합니다. 입력을 Prophet의 ds 및 y 열로 바꾸어 모델을 학습하고, 기본값으로 15분 간격의 미래 96개 시점을 예측합니다. include_history=True이므로 출력에는 과거 시점의 적합값도 포함합니다.
Python Functions, 생성된 온톨로지 SDK, pandas, Prophet과 timeseries-sdk가 필요합니다. 비어 있지 않은 입력에는 유효한 숫자 관측이 최소 두 개 있어야 합니다. 모델에 전달할 시각은 UTC로 변환한 뒤 시간대 정보를 제거합니다. 출력의 timestamp도 UTC 시각을 시간대 정보 없는 Timestamp로 표현합니다.
import pandas as pd
from functions.api import function
from ontology_sdk.ontology.objects import Machine
from prophet import Prophet
from timeseries_sdk.types import TimeSeries
@function
def performance_prophet_forecast(
machine: Machine,
periods: int = 96,
freq: str = "15min",
) -> list[bytes]:
dataframe = machine.performance_score.to_pandas(all_time=True)
if dataframe.empty:
empty = pd.DataFrame({
"timestamp": pd.Series(dtype="datetime64[ns]"),
"value": pd.Series(dtype="float64"),
})
return TimeSeries.serialize(empty)
training = dataframe.rename(
columns={"timestamp": "ds", "value": "y"}
)
training["ds"] = pd.to_datetime(training["ds"], utc=True).dt.tz_localize(None)
training = training.sort_values("ds")
model = Prophet().fit(training)
future = model.make_future_dataframe(
periods=periods,
freq=freq,
include_history=True,
)
forecast = model.predict(future)
output = forecast[["ds", "yhat"]].rename(
columns={"ds": "timestamp", "yhat": "value"}
)
return TimeSeries.serialize(output)
빈 입력은 timestamp와 숫자형 value 스키마를 가진 빈 시계열로 반환합니다. 실제 관측이 있는 경우에는 Prophet의 예측값 yhat을 value로 반환합니다.
설정 절차에서 라이브러리를 추가하고 함수 버전을 Quiver 카드에 연결합니다.