출처 https://www.boostcourse.org/ds214/lecture/102086?isDesc=false 

 

프로젝트로 배우는 데이터사이언스

부스트코스 무료 강의

www.boostcourse.org

 

1. 당뇨병 데이터셋

https://www.kaggle.com/uciml/pima-indians-diabetes-database

https://www.scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html#sklearn.datasets.load_diabetes

* pregnancies : 임신횟수
* glucose : 2시간 동안의 경구 포도당 내성 검사에서 혈장 포도당 농도
* bloodPressure : 이완기 혈압 (mm Hg)
* skinThickness : 삼두근 피부 주름 두께 (mm), 체지방을 추정하는데 사용되는 값
* insulin : 2시간 혈청 인슐린 (mu U / ml)
* BMI : 체질량 지수 (체중kg / 키 (m)^2)
* diabetesPedigreeFunction : 당뇨병 혈통 기능
* age : 나이
* outcome : 당뇨병인지 아닌지, 768개 중에 268개의 결과 클래스 변수 (0 / 1)는 1이고 나머지는 0이다. 

 

2. 라이브러리 import

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

%matplotlib inline

 

3. 데이터셋 로드

df = pd.read_csv("diabetes.csv")  #주피터노트북에서 실행 -> 경로 간단
df.shape

9개의 feature가 존재하고, 768개의 데이터가 있다.

 

df.head()

결측치가 없고 다 숫자로 되어있기 때문에 이 데이터셋은 전처리를 하지 않아도 괜찮다.

 

4. 학습, 예측 데이터셋 나누기

# 8:2 비율로 구하기 위해 전체 데이터 행에서 80% 위치에 해당되는 값을 구해서 split_count 변수에 담기

split_count = int(df.shape[0] * 0.8) 
split_count

# train, test로 슬라이싱을 통해 데이터 나눔

train = df[:split_count].copy()
train.shape

test = df[split_count:].copy()
test.shape

데이터셋 자체로 학습을 하고, 예측 후 정확도까지 알아보기 위해서 위에서부터 80%는 학습데이터, 나머지 20%는 예측데이터로 분리했다.

80% 지점이 614번째 데이터이기 때문에

학습데이터는 614개,

예측데이터는 154개이다.

 

5. 학습, 예측에 사용할 컬럼

# feature_names 라는 변수에 학습과 예측에 사용할 컬럼명을 가져옴
# 여러개를 가져왔기 때문에 list 형태로 가져옴

feature_names = train.columns[:-1].tolist()
feature_names

# label_name 에 예측할 컬럼의 이름 담음

label_name = train.columns[-1]
label_name

feature는 이렇게 9개가 있는데, 우리가 예측할 것은 마지막 컬럼인 outcome (당뇨병인지 아닌지) 이기 때문에 뒤에서 두번째 컬럼인 Age까지를 feature_names에 저장하고, 마지막 outcome을 label_name에 저장했다.

 

6. 학습, 예측 데이터셋 만들기

# 학습 세트 만들기 
# 행렬

X_train = train[feature_names]
print(X_train.shape)
X_train.head()

앞에서 나눈 80%의 학습데이터셋 train에 feature_names 컬럼을 적용하여 학습데이터셋 X_train 을 만들었다.

 

# 정답 값
# 벡터

y_train = train[label_name]
print(y_train.shape)
y_train.head()

마찬가지로 앞에서 나눈 80%의 학습데이터셋에 label_name 컬럼을 적용하여 학습할 때 정답을 맞추는 데이터셋 y_train을 만들었다.

 

# 예측에 사용할 데이터셋

X_test = test[feature_names]
print(X_test.shape)
X_test.head()

 

다음은 앞에서 나눈 20%의 예측데이터셋에 feature_names를 적용하여 학습한 알고리즘에 적용할 예측데이터셋 X_test를 만들었다.

# 예측의 정답값
# 실전에는 없지만, 실전 적용 전 정답을 알고있기 때문에 내가 만든 모델의 성능을 측정해봐야 함

y_test = test[label_name]
print(y_test.shape)
y_test.head()

마지막으로, 예측 모델의 성능을 측정하기 위한 예측 정답 데이터셋을 만들었다.

20% 예측 데이터셋에 label_name을 적용한 데이터셋으로, 실전 예측 문제에는 없지만 이 예제에서는 알고있는 값이기 때문에 모델의 성능을 측정할 때 사용할 것이다.

 

7. 머신러닝 알고리즘 가져오기

from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()
model

decision tree classifier 알고리즘을 사용할 것이기 때문에 이 알고리즘을 model 변수에 저장해준다.

 

8. 학습 (훈련)

model.fit(X_train, y_train)

아주 간단하다.

머신러닝 알고리즘.fit(훈련데이터, 정답데이터) 형식이다.

 

9. 예측

y_predict = model.predict(X_test)
y_predict[:5]

학습이 기출문제와 정답으로 공부를 하는 과정이었다면, 예측은 실전 문제를 푸는 과정이라고 볼 수 있다.

위에서 5개 데이터의 예측 결과를 보자면 이와 같다. 1은 당뇨병, 0은 당뇨병이 아니라는 것이다.

 

10. 트리 알고리즘 분석

from sklearn.tree import plot_tree

#plot_tree(model, 
#         feature_names = feature_names)  
# 글자로 나옴

# 시각화

plt.figure(figsize = (20, 20))

tree = plot_tree(model, 
                 feature_names = feature_names,
                filled = True,
                fontsize = 10)

 

# 피처의 중요도 표시 

model.feature_importances_

각 피처의 중요도를 알려준다.

 

# 피처의 중요도 시각화

sns.barplot(x = model.feature_importances_, y = feature_names)

seaborn을 활용해서 각 피처의 중요도를 시각화했다.

 

11. 정확도(Accuracy) 측정하기

# 실제값 - 예측값 -> 같은 값은 0으로 나옴
# 여기서 절대값을 씌운 값 = 1 인 값이 다르게 예측한 값임

diff_count = abs(y_test - y_predict).sum()
diff_count

# decision tree 예측할 때마다 다르게 예측할 수 있기 때문에 이 값은 다르게 나올 수 있음
# 항상 같게 하려면 model = DecisionTreeClassifier(random_state = 42)처럼 random_state 지정

우리는 예측 데이터셋의 정답도 알고있기 때문에 모델의 정확도를 측정할 수 있다.

outcome 값은 0 또는 1이기 때문에 실제값에서 예측값을 뺀 값의 절대값이 1인 값이 틀린 것이라고 볼 수 있다.

실제값에서 예측값을 뺀 값들의 합을 (틀린 예측의 수) diff_count 변수에 저장했다.

 

# 예측의 정확도 구하기 -> 100점 만점에 몇 점인지

(len(y_test) - diff_count) / len(y_test) * 100

예측데이터셋에서 틀린 예측의 수를 뺀 비율로 정확도를 구했더니 약 69%가 나왔다.

decision tree는 예측할 때마다 가지의 수 등의 원인으로 다르게 예측할 수 있다.

이를 고정하려면 알고리즘을 불러올 때 속성에서 random_state 값을 지정해주어야 한다.

 

# 위처럼 직접 구할 수도 있지만, 미리 구현된 알고리즘을 가져와 사용한다

from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict) * 100

 

이건 사이킷런에 미리 구현된 알고리즘으로 정확도를 계산한 것이다. 위와 같은 값이다.

 

# model 의 score로 점수 계산 (정답값 y_test 알고있을 때)

model.score(X_test, y_test)

이건 model 의 score로 점수를 계산한 것이다. 정답값을 알고있을 때 사용하며, 위에서의 정확도와 같다.

출처 https://www.boostcourse.org/ds214/joinLectures/28155

 

프로젝트로 배우는 데이터사이언스

부스트코스 무료 강의

www.boostcourse.org

 

1. Scikit Learn

- 대표적인 파이썬 머신러닝 라이브러리

- classification, regression, clustering, dimensionality reduction, model selection, preprocessing 등 알고리즘

 

- supervised machine learning

clf = RandomForestClassifier()  # 머신러닝 모델 (트리모델)

clf.fit(X_train, y_train)  # 학습, x는 학습 데이터, y는 정답

 

y_pred = clf.predict(X_test)  # 예측

clf.score(X_test, y_test)  # 확인, 현실 문제에서는 y_test 알 수 없을 것, 하지만 임의로 데이터를 나누어 학습시켰다면 알 수 있음

 

- unsupervised transfomations

pca = PCA()  # 비지도학습 중 차원축소기법

pca.fit(X_train)

X_new = pca.transform(X_test)

 

- estimator.fit(X, [y])

estimator: 지정해줄 수 있는 알고리즘 모델

fit -> 학습 (비지도학습은 y 없음)

 

* estimator.predict -> classification, regression, clustering

* estimator.transform -> preprocessing, dimensionality reduction, feature seelction, feature exteaction

 

2. 데이터 검증

 

데이터에 알맞는 모델과 파라미터를 찾기 위해 훈련 데이터로 테스트를 진행한다.

 

1. 데이터를 training data와 test data로 구분한다.

2. cross-validation을 통해 여러 fold로 나눈다.

3. 나눠준 폴더의 개수만큼 훈련을 진행한다.

4. 예를 들어 5개의 폴더로 나누면 fold1부터 5까지 하나씩 test data로 놓고 나머지로 training 후 test data로 성능을 확인한다.

5. 각각의 fold에 있는 점수의 평균을 내서 가장 좋은 점수를 내는 모델과 파라미터를 찾는다.

 

clf = SVC(파라미터)

clf.fit(X_train, y_train)

 

3. grid searches

이러한 과정을 거쳐 알맞은 모델과 파라미터를 구한다.

 

4. 기본 예제

from sklearn imoprt tree
X = [[0, 0], [1, 1]]
y = [0, 1]

clf = tree.DecisionTreeClassifier()
clf.fit(X, y)

clf.predict([[2., 2.]])

clf.predict_proba([[2., 2.]])

 

결정 트리 분류 모델에 x = [0, 0] 일  때 y = 0이고, x = [1, 1] 일 때 y = 1인 훈련 데이터를 학습시켰다.

그리고 x = [2., 2.]일 때 y값을 예측했더니 1이 나왔다.

 

estimator.predict_proba 는 예측값을 비율로 출력하는 함수이다.

 

5. iris dataset 예제

from sklearn.datasets import load_iris
from sklearn import tree
import matplotlib.pyplot as plt

X, y = load_iris(return_X_y = True)
X, y              # decisiontree 알고리즘이 숫자만 읽을 수 있기 때문에 카테고리 데이터 -> 숫자화

사이킷런 라이브러리에 내장되어 있는 아이리스 데이터셋을 불러왔다.

원래는 문자로 된 범주형 데이터지만, decision tree 알고리즘이 숫자만 읽을 수 있기 때문에 숫자로 변환한 것이다.

 

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)

plt.figure(figsize = (20, 10))
t = tree.plot_tree(clf.fit(X, y), filled= True)

 

decision tree classifier 를 이용하여 데이터를 학습시킨 트리 모델이다.

이를 통해 중요한 변수가 무엇인지 등을 알 수 있다.

 

더 그래프를 보기좋게 그리기 위해서 graphviz 라이브러리를 활용할 수 있다. 하지만 설치가 조금 까다롭기 때문에 나중에 다시 해보려고 한다.

수업 출처) 숙명여자대학교 소프트웨어학부 수업 "데이터사이언스개론", 박동철 교수님

 

1. Overfitting

- 데이터 사이언스에서 가장 중요한 근본 개념 중 하나이다.

- 모델을 만들 때 너무 flexible하게 만들면 모델이 특정한 데이터셋(훈련 데이터셋)에 너무 적합해진다.

 

- 모델이 훈련 데이터셋을 넘어선 일반적인 데이터셋에는 잘 적용되지 않는 경우이다.

- 모델은 새로운 데이터 개체도 잘 예측해야 한다.

 

2. 근본적인 부작용

- 더 복잡한 모델을 사용하면 정확도는 높아지겠지만, outfitting의 가능성 또한 높아진다.

- 한번에 overfitting을 제거할 방법은 없다.

- 가장 좋은 전략은 overfitting을 인지하고, 원칙적인 방법으로 복잡도를 조절하는 것이다.

 

- fitting graph : 복잡도 함수로써 모델의 정확도를 보여주는 그래프이다.

 

- 보통 모델을 만들 때 훈련 데이터에서 일정 부분을 holdout data로 빼놓고 훈련 데이터로 모델을 만든 다음 정답을 알고 있는 테스트 데이터로 정확도를 평가한다.

- 조금 더 general한 정확도를 측정할 수 있다.

- 위의 그림에서 오른쪽이 fitting graph이다.

 

3. overfitting 인지

- 모델이 충분히 복잡하지 않을 때 : 훈련데이터와 테스트 데이터 모두에서 정확도가 낮다. → underfitting

- 모델이 너무 복잡해질 때 : 훈련데이터에서는 정확도가 높아진다. 하지만, 테스트 데이터에서는 정확도가 낮아진다. → overfitting

 

- (ex) : customer churn table model.

    - 극단적인 예시는 fitting graph가 독특할 것이다.

    - 행의 개수가 많을수록 복잡도가 커질 수 있다.

 

    - learning에 'churn' data만 넣고, 여기에 없는 데이터는 'stay' data로 인식하도록 했다.

 

    - 모델이 증가하면서 훈련 데이터의 에러는 감소하지만, 테스트 데이터의 에러는 어느 특정 값에서 시작해서 변하지 않는다.

    - 이유 : 학습을 할 때 churn data만 put했다. 그러면 테스트 데이터는 그 안에 포함되어 있지 않기 때문에 모두 'stay' data로 인식한다. 하지만 그 중에 churn data가 있을 것이다. 따라서 (holdout 'churn' data) / (holdout data) 의 값이 holdout data의 base error rate (=b) 가 된다.

 

 

4. overfitting in tree induction

- 극단적인 classification tree : 모든 leaf node들이 pure할 때까지 데이터를 나눈 tree

    - 정확도는 100% 일 것이다.

    - overfitting 되었을 확률도 ^^..

 

- tree 모델의 복잡도는 노드의 개수에 비례한다.

    - tree 노드 개수에 제한이 없다면 어느 정확도에도 맞출 수 있을 것이다.

    - 따라서, tree가 자람에 따라 overfit 되는 경향이 있다.

 

- fitting graph for tree induction

    - ex) tree가 모집단의 특징이 아니라 훈련 데이터의 디테일한 부분을 고려하기 시작했을 때..

    - holdout data의 정확도가 떨어지는 순간 (= overfit이 시작되는 순간) 을 "sweet spot" 이라고 한다.

    - 그러므로 위의 경우 노드가 100개 정도 되는 순간부터 overfitting이 된다고 볼 수 있다.

    - 따라서 우리는 tree의 크기를 이 사이즈 (100) 로 제한해야 한다.

 

    - 하지만, 이론적으로 sweet spot을 정확하게 찾을 방법은 없다.

    - 따라서 이 부분은 데이터 과학자의 경험에 의해 결정해야 한다.

 

5. overfitting in mathematical functions

- 수학적 함수를 복잡하게 만드는 한 가지 방법은 변수나 항의 수를 늘리는 것이다.

 

 

- 더 많은 속성들을 사용하면서 모델은 훈련 데이터에 더 적합해질 수 있다. ( + overfitting 위험성)

- 즉, 변수나 항을 늘릴수록 훈련 데이터셋에서의 정확도는 증가한다.

 

- overfitting을 피하기 위해서는 오직 정보를 얻을 수 있는 유용한 속성들만 사용하고, 

- holdout technique을 활용해서 overfitting을 확인할 수 있다.

 

6. Holdout Evaluation

- 모델을 만들 때 holdout data를 빼놓고 형성한다.

- holdout data를 가지고 모델의 정확도를 평가한다.

- 목표는 모델의 일반화 성능을 추정하는것이다. 

- 답을 알고 있고, 훈련할 때 사용하지 않았기 때문에 정확도를 평가할 수 있다.

 

- 문제 

    - 이 테스트로부터 얻은 성능의 추정값은 단지 한번의 테스트를 통한 추정값이다.

    - 한 번의 추정만으로 모델 정확도에 확신을 얻는 방법은 운이 좋게 테스트 데이터를 한번에 잘 고르는 방법이 있겠다.

 

7. Cross-Validation (CV)

- holdout evaluation 의 더욱 정교화된 방법이다.

- holdout 평가를 여러번 진행한 뒤 그것의 통계값을 이용하는 방법이다.

 

- 추정된 성능에 대해 몇가지 통계값을 얻을 수 있다.

    - mean 평균 : 평균적으로 어느 정도의 성능이 예상되는가

    - variance 분산 : 데이터셋마다 성능이 얼마나 다른가

 

- k-fold cross-validation : 데이터셋을 k번으로 나누어서 나눈만큼 평가를 반복하는 방법이다.

 

- (ex) predict which customers are going to churn

    1) information gain

 

    2) classification tree

 

    3) 언제 tree building을 멈추는가?

        - 그렇게 복잡해지기 전에 멈춰야 한다.

        - 이 문제는 model generality와 overfittingr과 밀접한 관련이 있다.

 

    4) tree를 원래 데이터셋에 적용했을 때 정확도가 73%이다.

        - 이 값을 믿을 수 있는가?  다른 데이터셋에 적용해도 73%가 나올까?

        - 정확도가 73%인 것이 이 모델이 좋다는 의미인가? 좋지 않다는 의미인가?

 

8. Learning Curves

- 일반적으로, 모델의 일반화 성능은 어떠한 지점까지는 훈련 데이터 수를 증가시킴으로써 가능하다.

- learning curve : tree와 logistic regression에서 훈련 데이터 크기에 따른 일반화 성능을 나타낸 그래프이다.

 

 

- observations

    - decision tree가 logistic regression에 비해 더 유연하다.

    - 크기가 작은 데이터셋에 대해서는 logistic regression이 더 낫다. 

    - 크기가 큰 데이터셋에 대해서는 tree가 더 nonlienar 관계를 잘 표현한다.

 

- learning curve vs. fitting graphs

    - learning curve : 훈련 데이터의 일반화 성능을 보여준다. (x축 : training data 양)

    - fitting graph : 훈련 데이터 성능과 holdout 데이터 성능 2가지 모두 보여준다.  

 

9. Overfitting Avoidance and Complexity Control

- Regularization : 가장 대표적인 overfitting avoid 방법, 모델의 복잡도를 줄이는 방법이다.

 

9-1. for tree induction

- main problem

    - leaf node들이 순수해질 때까지 tree를 키우는 것

    - 이로 인해 크고 복잡한 데이터가 데이터에 맞지 않을 수 있다.

 

- 3 regularization

    - 더 복잡해지기 전에 멈추기

    - 충분히 tree 크기가 커질 때가지 키운 다음에, '가지치기' 해나가면서 다시 사이즈 줄이기

    - 서로 다른 크기를 가진 tree를 여러 개 만든 다음, 최선의 모델 선택하기

 

1) limit tree size

- 분할된 leaf node에 들어갈 개체의 최소 개수를 정해둔다. 

- 즉, 최소 개수 이하의 수가 되면 더이상 분할하지 않는다.

 

 

- 이 경우, 최소 개수를 20개로 정했기 때문에 각 그룹의 개체 수가 20개 이하가 되었을 때 growing을 멈췄다.

 

2) Prune An Overly Large Tree

- node와 branch들을 잘라내고, 그자리를 leaf node로 바꾸는 방법이다.

- 대체했을 때 정확도가 낮아지지 않을 때까지 진행한다.

- 성능이 떨어지지 않을 때까지 하위 그룹에서 반복되며 진행될 수 있다.

 

 

3) Build Many Trees And Pick The Best

- tree를 많이 만들어놓고, 그 중 가장 정확도가 높은 tree를 택하는 방법이다. 

 

9-2. for linear models

- 항이 많을수록 복잡하다.

 

1) Sequential forward selection (SFS)

- 순차적으로 항을 한 개씩 골라서 성능을 테스트한다. 그 중 가장 정확도가 높은 xᵢ를 선택하여 f(x) 에 넣는다.

- 그 다음, 처음으로 추가한 항을 포함하여 또 한 개의 항을 골라서 성능을 테스트한다. 그 중에서 가장 성능이 좋은 xᵢ를 선택하여 f(x) 에 넣는다.

- 이 과정을 계속 반복한다.

- 항을 추가하는 것이 테스트 데이터에서의 정확도를 더이상 높이지 않을 때까지 반복한다.

 

2) Sequential backward elimination (SBE)

- 위의 과정을 반대로 진행하는 것이다.

- 전체 f(x)에서 항을 한 개씩 선택하여 제거한 후 성능을 테스트한다.

- 제거했을 때 가장 성능이 좋은 xᵢ를 선택하여 제거한 후, 그 다음 또 항을 한 개 골라서 제거하고 성능을 테스트한다.

- 이 과정을 계속 반복한다.

- 마찬가지로 항을 제거하는 것이 더이상 정확도를 높이지 않을 때까지 반복한다.

 

10. Nested Cross-Validation

- 중첩된 CV

- 모델의 복잡도를 가장 크게 좌우하는 파라미터가 무엇인지 모를 때 사용한다.

- (ex) decision tree → number of nodes, linear model → number of features ···

 

- 즉, 복잡도 파라미터의 최적값을 찾기 위해 사용한다.

- (ex) What is the best number of nodes in a decision tree?

 

- 중첩된 loop 를 이용한다. (outer & inner loop)

    - outer loop :  만들어진 모델의 일반적인 성능 측정한다. (k-fold CV)

    - inner loop : best complexity parameter 찾아낸다.

 

    - inner loop → outer loop

 

- 단점 : inner loop 개수가 많을수록 실행 시간이 매우 길어진다.

 

 

 

 

 

 

 

 

 

 

수업 출처) 숙명여자대학교 소프트웨어학부 수업 "데이터사이언스개론", 박동철 교수님

 

1. Data Science Process

 

데이터 사이언스의 기본 원리는 데이터 마이닝이다. 데이터 마이닝은 상당히 잘 이해된 단계를 가진 process이다.

 

데이터 사이언티스트는 실생활의 문제를 하위 작업으로 분리한다.

하위 작업들의 솔루션들이 모여서 전체적인 문제를 해결할 수 있다.

 

문제의 기저가 되는 공통적인 데이터 마이닝 작업이 존재한다. 

(ex) classification, regression, clustering, association rule discovery

 

좋은 데이터 과학자가 되기 위해서는 다양한 공통적인 데이터 마이닝 작업을 해결하는 방법을 알아야 하고, 문제를 이렇게 공통적인 작업들로 나눌 수 있어야 한다.

 

각각의 하위 작업들은 그에 맞는 데이터 마이닝 기법으로 병렬처리 된다. 작업을 나눌 때 마이닝 방법을 생각해놓는 것이 좋다.

 

2. Common Data Mining Tasks

 

- classification : 분류 

- regression (a.k.a. value estimation) : 회귀 (value 추정)

- similarity matching : 유사도 매칭

- clustering : 군집화

- co-occurrence grouping (a.k.a. association rule discovery) : 동시발생 (관계 규칙 발견)

- profiling (a.k.a. behavior description) : 프로파일링 (행동 묘사)

- link prediction : 연관성 예측 (ex. recommendation)

- data reduction : 데이터 사이즈 줄이기 (불필요한 데이터 제거, 형태 변환 등)

- causal modeling : 인과관계 모델링

 

2-1. Classification 분류

 

모집단의 각 개체가 어떠한 클래스의 집합에 속할지 예측하는 방법이다. 

 

 

주로 상호배타적인 클래스로 분류할 때 사용한다.

분류에서 끝나는 것이 아니고, 분류를 학습하여 "예측" 하는 데 활용한다. → 지도학습에 활용

 

각각의 개체를 instance라고 하고, 속성을 attribute라고 한다.

예측의 대상이 되는 속성(클래스)를 classificaiton target 이라고 한다.

그리고 그 타겟들은 이미 상호배타적으로 설정되어 있다.

 

예를 들면, 연봉, 성별, 나이 등의 데이터로 이 사람이 어떠한 물건을 살지 안살지 예측하는 것이다.

이때 타겟은 "물건을 산다" 라는 속성이고, 클래스는 Yes 또는 No 이다.

 

일반적인 과정 : 훈련 데이터셋 → 데이터의 클래스를 묘사하는 모델 설정 (모델링) → 새로운 인스턴스가 주어질 때, 해당 모델을 적용하여 추측된 클래스 생성

 

비슷한 작업으로 scoring이나 class probability estimation 이 있다.

이는 각 개체가 각 클래스에 속할 확률을 도출하는 것이다.

예를 들어, 위의 예시에서 (Lee, 42000, male, 44) → (YES : 80%, NO : 20%) 이렇게 각 개체에 대해 클래스를 가질 확률을 계산한다.

 

2-2. Regression 회귀

 

각 개체가 특정 변수에 대해 어떠한 숫자 값을 가질 것을 예측하는 모델이다.

value estimation 이라고도 불린다.

 

 

예를 들어, 특정한 키의 사람은 어떤 값의 몸무게를 가질지 예측하는 것이다.

 

일반적인 과정 : 훈련 데이터셋이 주어질 때, 각 개인에 대해 특정 변수 값을 묘사하는 모델 설정 → 새로운 개체에 모델을 적용하여 측정된 값 생성

 

 

classification과의 차이점

- classification은 인스턴스의 "클래스"를 예측하는 것이다.  (ex. YES / NO)

- regression은 인스턴스와 관련된 "숫자 값"을 예측하는 것이다.   (ex. 178)

 

2-3. Similarity Matching 유사도 매칭

 

알고있는 데이터를 기반으로 유사한 데이터를 찾는 모델이다.

 

 

일반적인 과정 : 두 개체 사이의 거리 측정 → 한 개체에 대해서 가장 작은 거리를 갖는 개체 탐색

 

데이터의 종류가 다양하기 때문에 거리 측정에서는 유클리드 거리, 코사인 거리 등 다양한 종류의 거리를 사용한다.

 

(유클리드 거리) 예를 들어서, User 3 = (5, 4, 7, 4, 7), User 4 = (7, 1, 7, 3, 8) → distance ≅ 3.87

 

2-4. Clustering 군집화

 

비슷한 개체를 하나의 군집으로 묶는 모델이다. 

유사도를 측정하기 위해 "거리"를 사용한다. 

 

산점도에서 자연스럽게 형성되는 그룹을 분석할 때 유용하다. → 비지도학습에 활용

 

 

예를 들면, 주로 어떤 종류의 고객을 보유하고 있는지 파악할 때 사용된다.

 

2-5. Co-occurrence grouping 동시발생

 

개체들 사이의 동시 발생을 통해 관계를 찾는 모델이다. 

 

예를 들어서, 마트 판매 상품을 분석해보니 기저귀를 살 때 맥주도 같이 사는 손님의 비율이 높았다.

 

이와 같이 분석을 통해 특별 프로모션, 상품 진열, 세트 판매, 추천 등 마케팅에 활용할 수 있다.

 

2-6. Profiling 행동 특성 묘사

 

개인이나 집단의 전형적인 행동을 특징짓는 모델이다. 

 

normal한 행동특성에서 벗어난 행동을 탐지할 때 매우 유용하다.

프로필은 normal한 행동을 묘사하기 때문에, 갑자기 그것에 벗어난 행동을 할 때 알림을 주는 것이다.

 

한 예시로는 사기 탐지에 사용된다.

 

2-7. Link Prediction 연관성 예측

 

데이터 아이템들 사이의 연관성을 예측하는 모델이다. 

일반적으로 연결고리가 존재한다고 제안하고, 그 강도를 추정함으로써 사용된다.

 

"추천" 알고리즘에 매우 유용하다. SNS에서 친구를 추천해주거나, 넷플릭스 등에서 영화를 추천할 때 주로 사용된다.

 

2-8. Data Reduction 데이터 사이즈 감소

 

큰 데이터셋을 중요한 정보를 많이 포함하는 작은 데이터셋으로 사이즈를 줄이는 것이다.

 

작은 데이터셋은 다루기 쉽고, 정보나 향상된 인사이트를 보다 더 잘 드러낸다. 

하지만, 정보의 손실 또한 일어나기 쉽다는 단점이 있다.

 

2-9. Causal Modeling 인과관계 모델링

 

다른 사건에 실질적으로 영향을 주는 사건을 찾는 모델이다. 

 

예를 들어 담배피는 사람들 중에 이가 누런 사람과 폐암에 걸린 사람들이 있다고 할 때,

이 누래짐과 폐암이 담배때문에 발생한건지, 아니면 그냥 그런 사람들이 담배를 피는건지 인과관계를 파악하는 것이다.

 

3. Supervised 지도학습 vs. Unsupervised 비지도학습 Methods

 

3-1. Supervised

- 지도학습은 training data를 통해 이미 정답을 알고 학습을 시키는 것이다.

- 명시되어 있는 특정한 타겟이 존재한다.

- (ex) classification

 

Supervised data mining

- 알고싶은 특정한 타겟이 존재한다 → 답이 존재한다.

- training dataset이 반드시 존재한다 → 각각의 target value가 존재하는

- target value는 label 이라고도 부른다. 

- (ex) classification, regression, causal modeling

 

3-2. Unsupervised

- 비지도학습은 정답을 모르고 학습을 시키는 것이다.

- 정의해야 할 명시되어 있는 특정한 타겟이 없다.

- (ex) clustering

 

Unsupervised data mining

- 특정한 타겟이 아닌, 어떠한 패턴을 찾는 것이 목적이다.

- training dataset이 필요하지 않다.

- (ex) clustering, co-occurrence grouping, profiling

 

4. Classification vs. Regression

 

둘 다 supervised data mining task이다.

 

4-1. Classification

- 타겟이 카테고리 값이다. (ex. YES / NO, HIGH / MID / LOW)

- (ex) 이 고객이 인센티브를 받으면 이 상품을 구매할까? → YES / NO

고객이 인센티브를 받으면 (S1, S2, S3) 중에서 어떤걸 구매할 가능성이 높을까? → S1 / S2 / S3

 

4-2. Regression

- 타겟이 숫자 값이다. (ex. 2.5, 68)

- (ex) 이 고객이 이 서비스에 얼마를 쓸까? → $2,500

 

5. Data Mining and its Results

데이터 마이닝에는 두가지 단계가 있다.

 

5-1. Mining phase

: Historical Data (Training Data) → Data mining → Model

 

- training data를 통해 패턴 찾기 or 모델링

- training data는 모든 값이 명시되어 있어야 한다.

 

5-2. Use phase

: New data item → Model → Result

 

- 새로운 데이터에 패턴이나 모델 적용 → 예측

- 새로운 데이터는 알려지지 않은 class value가 존재한다.

 

6. Data Mining Process

: CRISP - DM (Cross Industry Standard Process for Data Mining)

산업을 통틀어서 데이터 마이닝을 위한 표준화된 Process이다.

 

: Business Understanding → Data Understanding → Data Preparation → Modeling → Evaluation → Deployment

 

기본적인 틀은 저 순서이고, 계속적인 평가를 통해 이전 과정으로 돌아가기도 하고 수정을 거듭하면서 점차 성능이 향상된다.

 

6-1. Business Understanding

- 해결해야 할 비즈니스 문제를 이해한다.

    -대부분 모호하거나 폭넓거나 이해하기 어려운 문제이다.

 

- 해결해야 할 비즈니스 문제를 하나 이상의 데이터 사이언스 문제로 간주한다.

    - 데이터 과학자들에 의해 공식화된 창의적인 문제가 성공의 열쇠가 된다.

 

- 문제를 여러 개의 하위 작업으로 나누고, 각각의 데이터 사이언스 문제를 해결할 방법을 디자인한다.

    - classification, regression, clustering 등

    - 각 문제에 맞는 효과적인 툴을 사용할 수 있다.

 

- 문제를 재구성하고 해결책을 설계하는 것은 반복적인 발견의 과정이다.

 

6-2. Data Understanding

- Data

    - 세운 해결책들에 이용가능한 원상태의 데이터셋이 존재한다.

    - (ex) a customer database, a transaction database, a marketing response database

 

- 각 데이터의 강점과 한계점을 이해한다.

    - 문제와 완벽하게 알맞는 데이터는 거의 존재하지 않는다.

    - 각 데이터로 할 수 있는 것과 없는 것을 찾고, 해당 데이터로 문제를 해결할 수 있을지 생각한다.

    - (ex) classification 을 하기 위해서는 라벨이 존재하는 데이터가 필요하다. 

 

- 데이터에 더 투자가 필요한지 결정한다.

    - 몇몇 데이터는 무료이지만, 몇몇 데이터는 얻기 위해 노력이 필요하거나 돈을 지불해야 한다.

 

6-3. Data Preparation

- 데이터를 정리해서 보다 유용한 형태로 변환한다.

    - 몇몇 데이터 분석 툴들은 특정한 형태의 데이터만 요구하기 때문이다.

 

- 일반적인 예시들

    - converting data to tabular format : 테이블 형식의 데이터로 변환

    - removing or inferring missing values : 결측치 제거하거나 유추

    - converting data to different types : (ex) 'male', 'female' → 0, 1  타입 변경 

    - normalizing or scaling numerical values : (ex) [-100, 100] → [0, 1]  범위 조절

    - cleaning data : (ex) Age : 999 → ? 데이터 정리

 

- 데이터 마이닝 결과의 질은 이 단계에 달려있다.

    - (ex) 결측치, 비정상 값, 정규화되지 않은 값

 

6-4. Modeling

- 가장 주요한 단계이다.

 

- output

   - 데이터의 규칙을 나타내는 모델이나 패턴의 일종을 생성한다.

 

- 데이터 마이닝의 근본적인 아이디어를 이해하는 것이 매우 중요하다.

    - 존재하는 데이터 마이닝 기술과 알고리즘을 이해하자.

 

6-5. Evaluation

- 데이터 마이닝 결과를 엄격하게 평가한다.

    - 다음 단계로 넘어가기 전에 그 결과가 유효하고 신뢰할 수 있다는 확신을 얻어야 한다.

 

- Examples

    - 모델의 예측 정확도 추정 (ex. 90%?)

    - training data를 넘어서는 모델의 보편성 확인 (overfitting 되지 않았는지)

    - 허위 경보의 비율 추정

 

- 결과를 즉각적으로 적용하는 대신, 일반적으로 통제된 상황에서 모델을 먼저 테스트하는 것이 바람직하다.

    - 그것이 더 쉽고 저렴하고 빠르고 안전하다.

 

- 데이터 사이언티스트는 그 모델과 평과 결과를 다른 데이터 사이언티스트들 외에 이해관계자들에게 쉽게 설명해야 한다.

    - 매니저, 고위 관계자, 프로그래머 등

 

 

6-6. Deployment

- 실제 상황에 데이터 마이닝 결과 (시스템)을 적용한다.

 

- 일반적인 시나리오

    - 새로운 예측 모델이 구현된다.

    - 그 모델은 기존의 정보 시스템과 통합된다.

 

- 많은 경우

    - Data Science Team : 프로토타입을 제작하고 평가한다.

    - Data Engineering Team : 모델을 생산 시스템에 적용한다.

 

- 적용 이후, 과정은 첫번째 단계로 되돌아간다.

    - 이 과정을 통해 얻은 통찰력과 경험을 통해 더욱 개선된 해결책을 제시할 수 있다.

 

7. Other Analytics Techniques & Technologies

- 데이터 마이닝 외에도 데이터 분석을 위한 다양한 기술들이 있다.

    - 통계학, 데이터베이스 시스템, 머신러닝 등

 

- 이러한 기술들을 익혀두는 것이 중요하다. 

    - 그것들의 목표가 무엇인지, 어떠한 역할을 하는지, 그것들의 차별점이 무엇인지

 

- 데이터 과학자에게 중요한 기술은 어떤 종류의 분석 기술이 특정한 문제를 해결하는데 적합한지 인지할 수 있는 것이다.

 

7-1. Statistics 통계학

- 분석의 바탕이 되는 많은 지식들을 제공한다.

 

- Examples

    - Data Summary (means, median, variance 등)

    - Understanding different data distributions

    - Testing hypotheses : 가설 테스트

    - Quantifying uncertainty : 불확실성 증명

    - Measuring correlation : 연관관계 측정

 

- 많은 기술들이 데이터에서 도출하는 모델이나 패턴들은 통계학에 근본을 두고 있다.

 

7-2. Database Querying

- Database system

    - 데이터 삽입, 질의 (쿼리), 업데이트 및 관리 할 수 있는 소프트웨어 응용 프로그램 

 

- Database query

    - 데이터나 데이터의 통계에 대한 특정한 요청

    - 데이터를 통해서 얻고자 하는 질문

        - (ex) 지정된 데이터 검색, 정렬, 요약 통계량 계산

    - 기술적 언어로 공식화되고 데이터베이스 시스템에 질문을 제기함

        - (ex) SQL (Structured Query Language)

SQL문 예시

 

- Data science vs. databases technologies

    - 데이터 사이언스에서 데이터베이스 시스템에 저장된 관심있는 데이터를 찾거나 조사하기 위해 데이터베이스 기술을 사용할 수 있다.

       

 

7-3. Machine Learning

- 컴퓨터 시스템이 명시적인 프로그래밍 없이, 데이터를 가지고 학습할 수 있는 능력을 제공하는 것이다.

    - 인공지능의 한 분야이다.

 

- 모델을 개발하고 모델 성능을 향상시키는 데에 데이터를 활용한다.

    - (ex) decision tree, artificial neural networks (deep learning), support vector machines, clustering, bayesian networks,...

 

- 하지만,이들 사이의 경계가 모호해졌다.

 

- 데이터 마이닝과 머신러닝은 긴밀히 연결되어있다.

    - 데이터 마이닝의 한 분야가 머신러닝으로 파생되기 시작하였다.

    - 데이터 마이닝은 머신러닝의 한 가지이다.

        - KDD (Knowledge Discovery and Data mining)

        - 둘 사이에 기술과 알고리즘은 공유된다.

    - 데이터로부터 유용하고 유익한 패턴을 찾아낸다.

 

- 그럼에도 불구하고 머신러닝은 성능향상, 인지능력 향상에 더욱 집중되어 있다.

    - (ex) robotics and computer vision

    - (ex) agent가 이 환경에서 학습된 지식을 어떻게 활용하는가

 

- 데이터 마이닝은 데이터로부터 패턴, 규칙을 찾는 것에 더욱 집중되어 있다. 

    - 상업적 응용 프로그램 및 비즈니스 문제에 특히 활용된다.

 

8. Examples of Applying These Techniques

- "어떤 고객이 가장 수익성이 있는가?" : Database systems (profiable can be calculated from existing data., not predict)

- "수익성이 있는 고객과 평균의 고객들 간에 정말 차이가 있는가?" : Statistics (hypothesis testing)

- "하지만 이 고객들은 정말 누구인가? 특징화 할 수 있는가?" : Data mining (profiling)

- "어떤 특정한 새로운 고객이 수익성이 있을까? 얼마나?" : Data mining (classification, regression)

+ Recent posts