10.머신러닝

Edit

10.1anomaliesanomalies

이상치를 검출하는 알고리즘인 Isolation Forest 모델(일부 데이터를 샘플링하여 의사결정 나무 모델을 생성하는 방식)을 사용하여 예측 데이터를 출력합니다.

문법

사전에 학습된 isolation forest 모델을 호출해서 사용하는 방식

anomalies model=MODEL_NAME [size=N] [sample=N]

쿼리 수행시 서브쿼리를 통해 학습된 모델을 사용하여 isolation forest 분석을 수행하는 방식

anomalies [size=N] [sample=N] FIELD_1[, FIELD_2, ...] [ SUBQUERY ]
model=모델명

학습된 isolation forest 분석 모델명을 입력합니다. 로그프레소 엔진에 CLI로 접속하여 모델 생성 및 학습을 진행할 수 있습니다.

target=TARGET_FIELD

분류값으로 사용할 target 변수를 입력합니다. target 변수를 누락할 경우 결과가 0건으로 출력됩니다.

FIELD_1[, FIELD_2, ...]

학습모델에서 사용할 필드들을 입력합니다.

SUBQUERY

학습모델에서 사용할 트레이닝셋 데이터 조회 쿼리를 입력합니다.

설명

이상치 값은 0~1 사이의 값을 가지는 _score라는 필드에 스코어링되어 출력됩니다. 0.5에서 1에 가까울 수록 이상치이며 보통 0.6 이상으로 이상치를 판별하거나 분석 결과에 따라 임계값을 조정할 수 있습니다.

사용 예

1) anomal_stock 라는 이름의 모델을 사용하는 경우

table stocks
| anomalies model=anomal_stock
| eval anom = if(_score>0.7, stocks, null)

2) 서브쿼리로 트레이닝 셋을 사용하는 경우

table stocks
| anomalies sample=256 stocks 
  [ csvfile /test/sam_train.csv
  | eval _time=date(date, "yyyyMMdd"), stocks = int (stocks) | fields _time, stocks ]
| eval anom = if(_score>0.65, stocks, null) | fields _time, anom, stocks

10.2forecastforecast

주어진 시계열 데이터에 대해 예측 데이터를 출력합니다.

문법

forecast [count=NUM] [period=NUM] [seed=NUM] [time=FIELD] FIELD [by PARTITION_1, PARTITION_2, ...]
count=NUM

출력할 데이터 행 개수를 입력합니다. 입력하지 않으면 5건을 출력합니다.

period=NUM

데이터의 주기를 입력합니다. 입력하지 않으면 자동으로 주기를 계산합니다.

seed=NUM

고정 시드 값을 입력합니다. 같은 입력에 같은 결과를 유지하고 싶을 때 시드 값을 지정합니다.

time=FIELD

시간 레코드로 사용할 필드 이름을 입력합니다. 입력하지 않으면 _time를 사용합니다.

설명

timechart 명령어 등으로 시간 필드의 데이터의 간격이 일정하도록 설정한 후 forecast 명령어를 사용하는 것을 권장합니다. 입력 데이터는 파티션 별로 4건 이상 있어야 하며, period의 값은 입력 데이터 건 수의 1/2 이하이어야 합니다.

사용 예

1) count 필드의 forecast값 추출

forecast count

2) traffic 필드의 시계열 주기를 '5'로 잡고, 'set_time' 필드에 기재된 시간에 따라 시계열 예측 데이터를 출력. 같은 결과를 유지하기 위해 고정 시드 값으로 '1234'를 할당

forecast period=5 time=set_time seed=1234 traffic

3) region 필드를 기준으로 'sent_bytes' 필드의 시계열 예측 데이터를 10건씩 추출

forecast count=10 sent_bytes by region

10.3loflof

가장 인접한 k개의 이웃을 기준으로 각 점의 밀도를 계산하고, 인접한 이웃과 상대적인 밀도의 비율을 계산하여 LOF (Local Outlier Factor) 지수를 계산합니다.

문법

lof [k=NUM] FIELD_1[, FIELD_2, ...] [by GRP_FIELD_1[, GRP_FIELD_2, ...]]
k=NUM

계산에 사용할 이웃 노드 개수를 설정합니다. 설정하지 않으면 기본값으로 10을 적용합니다.

FIELD_1[, FIELD_2, ...]

필드 값은 정수, 실수, 날짜처럼 숫자형 데이터만 허용됩니다. by 절을 사용해 그룹별 스코어링을 계산하려면 각 그룹의 레코드 수는 이웃 노드 수(k=NUM 으로 지정한 값)보다 많아야 합니다. 이웃 노드 수보다 그룹의 레코드 수가 적으면 모든 점이 하나의 군집으로 잡히기 때문에 이상지수 (_lof 필드 출력값) 가 의도한대로 계산되지 않습니다.

[by GRP_FIELD_1[, GRP_FIELD_2, ...]]

by 절을 사용하면 그룹 필드로 구분된 각 그룹별로 LOF 지수를 계산합니다.

설명

각 레코드마다 _lof 필드에 LOF 지수를 계산하며, 이 값은 아래와 같이 분류할 수 있습니다:

사용 예

1) iris 이상치 탐지

sepal_length와 sepal_width 필드 값을 기준으로 이상치를 계산합니다(다운로드: https://github.com/illinois-cse/data-fa14/blob/gh-pages/data/iris.csv).

csvfile iris.csv
| eval
  sepal_length = double(sepal_length), sepal_width = double(sepal_width)
| lof sepal_length, sepal_width
| search _lof > 2

10.4rforestrforest

분류모델 머신러닝 알고리즘인 Random Forest 모델(다수의 결정 트리들을 학습)을 사용하여 예측 데이터를 출력합니다.

문법

로그프레소에서 학습된 random forest 분석 모델을 호출해서 사용하는 방식

rforest model=MODEL_NAME

쿼리 수행시 서브쿼리를 통해 학습된 모델을 사용하여 random forest 분석을 수행하는 방식

rforest target=TARGET_FIELD FIELD_1[, FIELD_2, ...] [ SUBQUERY ]
model=모델명

로그프레소에서 학습된 random forest 분석 모델명을 입력합니다. 학습된 모델을 호출하려면 CLI에서 ml커맨드를 통해 학습한 모델 결과를 먼저 저장해야 합니다. (CLI ml커맨드 설명 참조)

target=TARGET_FIELD

분류값으로 사용할 target 변수를 입력합니다. target 변수를 누락할 경우 결과가 0건으로 출력됩니다.

FIELD_1[, FIELD_2, ...]

학습모델에서 사용할 필드들을 입력합니다.

SUBQUERY

학습모델에서 사용할 트레이닝셋 데이터 조회 쿼리를 입력합니다.

설명

분석 결과는 _guess 필드에 target 변수의 값을 추정하여 출력하게 됩니다.

사용 예

1) 로그프레소에서 학습된 모델 (모델명 : rforest_titanic) 을 사용하는 경우

table titanic_test
| rforest model=rforest_titanic
| eval _guess = if(_guess=="0", "사망 ", "생존")

2) 서브쿼리로 트레이닝 셋을 사용하는 경우

table titanic_test
| rforest target=Survived Pclass, Sex, Age, Fare, Embarked
  [ csvfile /test/train.csv
  | eval Age=double(Age), Fare=double(Fare), CanbinLetter=nvl(substr(Cabin, 0, 1), "--"), TicketType=if(isnull(long(Ticket)), substr (Ticket, 0, indexof(Ticket, " ")), "--")
  | rex field=Name ", (?<Title>[^.]+)" | eval Survived = if(Survived=="0", " 사망 ", "생존")]
Count of comments [0]