SPSS 노트북에서의 예측 분석 분류 및 회귀 알고리즘

노트북에서 일반화 선형 모델, 선형 회귀, 선형 서포트 벡터 머신, 랜덤 트리 또는 CHAID SPSS 와 같은 예측 분석 알고리즘을 사용할 수 있습니다.

일반화 선형 모델

일반화 선형 모델(GLE)은 다양한 유형의 데이터에 널리 사용되는 분석 알고리즘입니다. 이 책은 정규 분포를 따르는 종속변수를 위한 선형 회귀, 이항 또는 다항 분포를 따르는 종속변수를 위한 로지스틱 모델, 계수 데이터를 위한 로그선형 모델과 같이 널리 사용되는 통계 모델뿐만 아니라, 매우 일반적인 모델 정의를 통해 다양한 유용한 통계 모델들도 다루고 있습니다. 일반화 선형 모델(GLM)은 모델 구축 외에도 변수 선택, 분포 및 연결 함수의 자동 선택, 모델 평가 통계량 등 다양한 유용한 기능을 제공합니다. 이 모델에는 LASSO, 능선 회귀, 탄성 네트 등과 같은 정규화에 대한 옵션이 있습니다. 매우 광범위한 데이터를 처리할 수도 있습니다.

분포 함수와 연결 함수를 선택하는 방법에 대한 자세한 내용은 ‘분포 함수와 연결 함수의 조합’을 참조하십시오.

예제 코드 1:

이 예제는 분포와 연결 함수를 지정하고, 효과와 절편을 설정하며, ROC 곡선을 작성하고, 상관 행렬을 출력하는 GLE 설정을 보여줍니다. 이 시나리오는 모델을 구축한 다음, 해당 모델에 점수를 매깁니다.

Python 예시:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle1 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee", "Educational_level"], nestingLevels=[0, 0])]). \
    setIntercept(True). \
    setDistribution("NORMAL"). \
    setLinkFunction("LOG"). \
    setAnalysisType("BOTH"). \
    setConductRocCurve(True)

gleModel1 = gle1.fit(data)
PMML = gleModel1.toPMML()
statXML = gleModel1.statXML()
predictions1 = gleModel1.transform(data)
predictions1.show()

예제 코드 2:

이 예제는 분포와 연결 함수가 명시되지 않은 GLE 설정과, 전진 단계적(forward stepwise) 방법을 사용한 변수 선택을 보여줍니다. 이 시나리오는 전진 단계별(forward stepwise) 방법을 사용하여 분포, 연결 함수 및 효과를 선택한 다음, 모델을 구축하고 점수를 산출합니다.

Python 예시:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle2 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0])]). \
    setIntercept(True). \
    setDistribution("UNKNOWN"). \
    setLinkFunction("UNKNOWN"). \
    setAnalysisType("BOTH"). \
    setUseVariableSelection(True). \
    setVariableSelectionMethod("FORWARD_STEPWISE")

gleModel2 = gle2.fit(data)
PMML = gleModel2.toPMML()
statXML = gleModel2.statXML()
predictions2 = gleModel2.transform(data)
predictions2.show()

예제 코드 3:

이 예제는 분포를 지정하지 않고, 연결 함수를 명시하며, LASSO 방법을 이용한 변수 선택을 적용한 GLE 설정을 보여줍니다. 또한 이 예제에서는 2차 상호작용 검출 및 자동 페널티 매개변수 선택 기능이 포함되어 있습니다. 이 시나리오는 효과에 대한 양방향 상호작용을 탐지한 다음, LASSO 기법을 사용하여 자동 페널티 매개변수 선택을 통해 분포와 효과를 선정하고, 모델을 구축하여 점수를 산출합니다.

Python 예시:

from spss.ml.classificationandregression.generalizedlinear import GeneralizedLinear
from spss.ml.classificationandregression.params.effect import Effect

gle3 = GeneralizedLinear(). \
    setTargetField("Work_experience"). \
    setInputFieldList(["Beginning_salary", "Sex_of_employee", "Educational_level", "Minority_classification", "Current_salary"]). \
    setEffects([
        Effect(fields=["Beginning_salary"], nestingLevels=[0]),
        Effect(fields=["Sex_of_employee"], nestingLevels=[0]),
        Effect(fields=["Educational_level"], nestingLevels=[0]),
        Effect(fields=["Current_salary"], nestingLevels=[0])]). \
    setIntercept(True). \
    setDistribution("UNKNOWN"). \
    setLinkFunction("LOG"). \
    setAnalysisType("BOTH"). \
    setDetectTwoWayInteraction(True). \
    setUseVariableSelection(True). \
    setVariableSelectionMethod("LASSO"). \
    setUserSpecPenaltyParams(False)

gleModel3 = gle3.fit(data)
PMML = gleModel3.toPMML()
statXML = gleModel3.statXML()
predictions3 = gleModel3.transform(data)
predictions3.show()

선형 회귀

선형 회귀 모델은 연속형 종속 변수와 하나 이상의 독립 변수(연속형 또는 범주형일 수 있음) 간의 예측 관계를 분석합니다.

선형 회귀 모델의 주요 기능으로는 상호작용 효과의 자동 탐지, 전진 단계적 모델 선택, 진단 검사, 그리고 추정 한계 평균(EMMEANS)을 기반으로 한 비정상 범주 탐지 등이 있습니다.

예제 코드:

Python 예시:

from spss.ml.classificationandregression.linearregression import LinearRegression

le = LinearRegression(). \
    setTargetField("target"). \
    setInputFieldList(["predictor1", "predictor2", "predictorn"]). \
    setDetectTwoWayInteraction(True). \
    setVarSelectionMethod("forwardStepwise")

leModel = le.fit(data)
predictions = leModel.transform(data)
predictions.show()

선형 서포트 벡터 머신

선형 서포트 벡터 머신(LSVM)은 레이블이 지정된 훈련 데이터 집합으로부터 입력-출력 매핑 함수를 생성하는 지도 학습 기법을 제공합니다. 매핑 함수는 분류 함수이거나 회귀 함수일 수 있습니다. LSVM은 기록 수와 변수(매개변수) 수 측면에서 대규모 문제를 해결하기 위해 고안되었습니다. 이 모델의 특징 공간은 문제의 입력 공간과 동일하며, 단일 레코드당 0이 아닌 요소의 평균 개수가 적은 스파스 데이터를 처리할 수 있습니다.

예제 코드:

Python 예시:

from spss.ml.classificationandregression.linearsupportvectormachine import LinearSupportVectorMachine

lsvm = LinearSupportVectorMachine().\
    setTargetField("BareNuc").\
    setInputFieldList(["Clump", "UnifSize", "UnifShape", "MargAdh", "SingEpiSize", "BlandChrom", "NormNucl", "Mit", "Class"]).\
    setPenaltyFunction("L2")

lsvmModel = lsvm.fit(df)
predictions = lsvmModel.transform(data)
predictions.show()

무작위 나무

랜덤 트리(Random Trees)는 강력한(정확한) 예측 모델을 생성하는 데 효과적인 방법론입니다. 이 방법은 분류나 회귀 문제에 대한 다른 최첨단 기법들과 비교해도 손색이 없으며, 때로는 더 우수한 성능을 보입니다.

Random Trees는 여러 개의 CART 유사 트리로 구성된 앙상블 모델입니다. 각 나무는 원본 데이터 사례들을 중복 허용 방식으로 표본 추출하여 얻은 부트스트랩 표본을 기반으로 성장합니다. 또한, 트리 성장 과정에서 각 노드에 대해 전체 변수 집합에서 무작위로 추출된 소수의 변수 중에서 최적의 분할 변수가 선택된다. 모든 나무는 최대한 크게 자라도록 두며, 가지치기를 하지 않습니다. 점수 산정 시, 랜덤 트리는 개별 트리의 점수를 (분류 문제의 경우) 다수결 방식이나 (회귀 분석의 경우) 평균 방식으로 합산합니다.

예제 코드:

Python 예시:

from spss.ml.classificationandregression.ensemble.randomtrees import RandomTrees

# Random trees required a "target" field and some input fields. If "target" is continuous, then regression trees will be generate else classification .
# You can use the SPSS Attribute or Spark ML Attribute to indicate the field to categorical or continuous.
randomTrees = RandomTrees(). \
    setTargetField("target"). \
    setInputFieldList(["feature1", "feature2", "feature3"]). \
    numTrees(10). \
    setMaxTreeDepth(5)

randomTreesModel = randomTrees.fit(df)
predictions = randomTreesModel.transform(scoreDF)
predictions.show()

CHAID

CHAID(Chi-squared Automatic Interaction Detection)는 카이-제곱 통계를 활용하여 최적의 분할 지점을 식별함으로써 의사결정 트리를 구축하는 분류 방법입니다. 회귀 분석 문제에 적용할 수 있는 확장 기능도 제공됩니다.

CHAID는 먼저 각 입력 변수와 목표 변수 간의 교차 집계 결과를 분석한 후, 카이-제곱 독립성 검정을 통해 유의성을 검증합니다. 이러한 관계 중 두 개 이상이 통계적으로 유의미한 경우, CHAID는 가장 유의미한(p값이 가장 작은) 입력 변수를 선택합니다. 입력값에 세 개 이상의 범주가 있는 경우, 이들 범주를 비교하여 결과에 차이가 없는 범주는 하나로 통합됩니다. 이는 차이가 가장 작은 두 범주를 차례로 결합함으로써 이루어집니다. 남은 모든 범주가 지정된 검증 수준에서 서로 다를 때 이 범주 병합 과정이 중단됩니다. 명목형 입력 필드의 경우 모든 범주를 병합할 수 있지만, 서수형 집합의 경우 인접한 범주만 병합할 수 있습니다. 대상 필드 이외의 연속형 입력 필드는 직접 사용할 수 없으며, 먼저 순서형 필드로 변환해야 합니다.

완전 CHAID는 각 예측 변수에 대해 가능한 모든 분할을 더 철저히 검토하는 CHAID의 변형 방식이지만, 계산 시간이 더 오래 걸립니다.

예제 코드:

Python 예시:

from spss.ml.classificationandregression.tree.chaid import CHAID

chaid = CHAID(). \
    setTargetField("salary"). \
    setInputFieldList(["educ", "jobcat", "gender"])

chaidModel = chaid.fit(data)
pmmlStr = chaidModel.toPMML()
statxmlStr = chaidModel.statXML()

predictions = chaidModel.transform(data)
predictions.show()