Runway에 포함된 Link를 사용하여 테이블 형식 데이터 세트를 로드하고 회귀 모델을 학습하여 저장합니다. 작성한 모델 학습 코드를 재학습에 활용하기 위해 파이프라인을 구성하고 저장합니다.
📘 빠른 실행을 위해 아래의 주피터 노트북을 활용할 수 있습니다.
아래의 주피터 노트북을 다운로드 받아 실행할 경우, "pca-model" 이름의 모델이 생성되어 Runway에 저장됩니다.
📘 이 튜토리얼은 4축 로봇팔을 모사한 데이터를 이용해 이상탐지를 수행하는 모델을 생성합니다.
로봇팔 데이터셋은 아래 항목을 클릭하여 다운로드 할 수 있습니다.
robotarm-train.csv
📘 데이터셋 생성에 관한 자세한 내용은 공식 문서를 참고하세요.
- Runway 프로젝트 메뉴에서 데이터셋 페이지로 이동합니다.
- 데이터 세트 메뉴에서 데이터 세트 생성 메뉴에 진입합니다.
- 좌측 데이터 세트 목록 상단
+
버튼을 클릭합니다. - 초기 화면에서
Create
버튼을 클릭합니다.
- 좌측 데이터 세트 목록 상단
- 다이얼로그에서 생성할 데이터 세트의 이름을 입력 후
Create
버튼을 클릭합니다.
Versions 섹션
에서Create version
버튼을 클릭합니다.- 다이얼로그에서
Local file
을 선택합니다. - 저장하는 데이터셋의 이름과 설명을 입력합니다.
- 데이터셋으로 생성할 파일을 파일 탐색기로 선택하거나, Drag&Drop으로 입력합니다.
Create
를 클릭합니다.
- (Optional) 튜토리얼에서 사용할 패키지를 설치합니다.
!pip install pandas scikit-learn
📘 데이터 세트 불러오는 방법에 대한 구체적인 가이드는 데이터 세트 가져오기 가이드 에서 확인할 수 있습니다.
- 노트북 셀 상단의 Add Runway Snippet 버튼을 클릭합니다.
- Import Dataset 를 선택합니다.
- 사용할 데이터 세트의 버전을 선택하고 Save 버튼을 클릭합니다.
- 버튼 클릭 시 노트북 셀 내 선택한 데이터 세트 내 파일 목록을 조회할 수 있는 스니펫이 작성되며, 해당 데이터 세트 경로를 값으로 갖는 데이터 세트 파라미터가 추가됩니다.
- 데이터 세트를 불러오고자 하는 노트북 셀에서 등록된 데이터 세트 파라미터의 이름을 입력하여 작업에 활용합니다.
import os import pandas as pd dfs = [] for dirname, _, filenames in os.walk(RUNWAY_DATA_PATH): for filename in filenames: if filename.endswith(".csv"): d = pd.read_csv(os.path.join(dirname, filename)) elif filename.endswith(".parquet"): d = pd.read_parquet(os.path.join(dirname, filename)) else: raise ValueError("Not valid file type") dfs += [d] df = pd.concat(dfs)
-
데이터 세트에 인덱스를 설정하고 id 값을 제거한뒤, 총 1000개의 데이터만 사용합니다.
proc_df = raw_df.set_index("datetime").drop(columns=["id"]).tail(1000)
-
데이터셋을 학습용 데이터셋과 테스트용 데이터셋으로 분리합니다.
from sklearn.model_selection import train_test_split train, valid = train_test_split(proc_df, test_size=0.2, random_state=2024)
-
모델 학습을 위한 모델 클래스를 작성합니다.
import pandas as pd from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler class PCADetector: def __init__(self, n_components): self._use_columns = ... self._scaler = StandardScaler() self._pca = PCA(n_components=n_components) def fit(self, X): self._use_columns = X.columns X_scaled = self._scaler.fit_transform(X) self._pca.fit(X_scaled) def predict(self, X): X = X[self._use_columns] X_scaled = self._scaler.transform(X) recon = self._recon(X_scaled) recon_err = ((X_scaled - recon) ** 2).mean(1) recon_err_df = pd.DataFrame(recon_err, columns=["anomaly_score"], index=X.index) return recon_err_df def _recon(self, X): z = self._pca.transform(X) recon = self._pca.inverse_transform(z) return recon def reconstruct(self, X): X_scaled = self._scaler.transform(X) recon_scaled = self._recon(X_scaled) recon = self._scaler.inverse_transform(recon_scaled) recon_df = pd.DataFrame(recon, index=X.index, columns=X.columns) return recon_df
📘 Link 파라미터 등록 가이드는 파이프라인 파라미터 설정 문서에서 확인할 수 있습니다.할 수 있습니다.
-
PCA에서 사용할 컴포넌트의 개수를 지정하기 위해서 Link 파라미터로 N_COMPONENTS 에 2 를 등록합니다.
N_COMPONENTS
: 2
-
선언한 모델 클래스에 Link 파라미터를 입력하고 학습용 데이터셋을 활용하여 모델을 학습하고 관련된 정보를 로깅합니다.
parameters = {"n_components": N_COMPONENTS} detector = PCADetector(n_components=parameters["n_components"]) detector.fit(train) train_pred = detector.predict(train) valid_pred = detector.predict(valid) mean_train_recon_err = train_pred.mean() mean_valid_recon_err = valid_pred.mean()
📘 모델 업로드 방법에 대한 구체적인 가이드는 모델 업로드 문서에서 확인할 수 있습니다.
- Runway code snippet 의 save model을 사용해 모델을 저장하는 코드를 생성합니다.
- 생성된 코드에 필요한 input_sample 을 작성합니다.
import runway # start run runway.start_run() # log param runway.log_parameters(parameters) # log metric runway.log_metric("mean_train_recon_err", mean_train_recon_err) runway.log_metric("mean_valid_recon_err", mean_valid_recon_err) # log model input_sample = proc_df.sample(1) runway.log_model(model_name="pca-model", model=detector, input_samples={"predict": input_sample}) # stop run runway.stop_run()
📘 파이프라인 생성 방법에 대한 구체적인 가이드는 파이프라인 업로드 문서에서 확인할 수 있습니다.
- Link에서 파이프라인을 작성하고 정상 실행 여부를 확인합니다.
- 정상 실행 확인 후, Link pipeline 패널의 Upload pipeline 버튼을 클릭합니다.
- New Pipeline 버튼을 클릭합니다.
- Pipeline 필드에 Runway에 저장할 이름을 작성합니다.
- Pipeline version 필드에는 자동으로 버전 1이 선택됩니다.
- Upload 버튼을 클릭합니다.
- 업로드가 완료되면 프로젝트 내 Pipeline 페이지에 업로드한 파이프라인 항목이 표시됩니다.