페이지

2018년 1월 24일 수요일

2. 지도 학습

2.1 분류와 희귀
지도 학습에는 분류(classification)와 희귀(regression)가 있습니다.

분류는 미리 정의된, 가능성 있는 여러 클래스 레이블(class label)중 하나를 얘측
이진 분류(binary classification): 두 개의 클래스로 분류
한 클래스를 양성(positive)클래스, 다른 하나를 음성(negative)클래스

다중 분류(multiclass classification): 셋 이상의 클래스로 분류

희귀는 연속적인 숫자, 또는 프로그래밍 용어로 말하면 부동소수점수(수학 용어로는 실수)를 예측하는 것
ex)어떤 사람의 교육 수준, 나이, 주거지를 바탕으로 연간 소득을 예측하는 것

출력값에 연속성이 있는지 여부로 휘귀와 분류를 구분할 수 있습니다.
연속성이 있으면 희귀
연속성이 없으면 분류

2.2 일반화, 과대적합, 과소적합

지도 학습에서는 훈련 데이터로 학습한 모델이 훈련 데이터와 특성이 같다면 처음 보는 새로운 데이터가 주어져도 정확히 예측할 거라 기대합니다. 모델이 처음 보는 데이터에 대해 정확하게 예측할 수 이/ㅅ으면 이를 훈련 세트에서 테스트 세트로 일반화(generalization)되었다고 합니다. 그래서 모델을 만들 때는 가능한 정확하게 일반화되도록 해야 합니다.

보통 훈련 세트에 대해 정확히 예측하도록 모델을 구축합니다. 훈련 세트와 테스트 세트가 매우 비슷하다면 그 모델이 테스트 세트에서도 정확히 예측하리라 기대할 수 있습니다. 그러나 항상 그런 것만은 아닙니다. 예를 들어 아주 복잡한 모델을 만든다면 훈련 세트에만 정확한 모델이 되어버릴수 있습니다.

가상의 예를 만들어 설명해보겠습니다. 초보 데이터 과학자가 요트를 구매한 고객과 구매의사가 없는 고객그의 데이터를이용해 누가 요트를 살지 예측하려 합니다. 그래서 관심없는 고객들을 성가시게 하지 않고 실제 구매할 것 같은 고객에게만 홍보 메일을 보내는 것이 목표입니다.

알고리즘이 새로운 데이터도 잘 측정하는 방법은 테스트 세트로 평가해보는 것밖에 없습니다. 그러나 직관적으로 보더라도(아마 수학적으로 볼때도) 간단한 모델이 새로운 데이터에 더 잘 일반화 될것이라고 예상할 수 있습니다. 만약 "50세 이상인 사람은 보트를 사려고 한다"라는 규칙을 만들었다면 이 규칙은 모든 고객데이터를 만족시킬 뿐 아니라, 나이 외에 자녀 수나 혼인 상태를 추가한 규칙보다 더 신뢰할 수 있습니다. 그렇기 때문에 우리는 언제나 가장 간단한 모델을 찾으려고 합니다. 초보 데이터 과학자가 했던것 처럼 가진 정보를 모두 사용해서 너무 복잡한 모덱을 만드는 것을 과대적합(overfitting)이라고 합니다. 과대 적합은 모델이 훈련 세트의 각 샘플에 너무 가깝게 맞춰져서 새로운 데이터에 일반화되기 어려울 때 일어납니다. 반대로 모델이 너무 간단하면, 즉"집이 있는 사람은 모두 요트를 사려고 한다"와 같은 경우에는 데이터의 면면과 다양성을 잡아내지 못할 것이고 훈련 세트에도 잘 맞지 않을 것입니다. 너무 가단한 모델이 선택되는 것을 과소적합(underfitting)이라고 합니다.

모델을 복잡하게 할 수록 훈련 데이터에 대해서는 더 정확히 예측할  수 있습니다. 그러나 너무 복잡해지면 훈련 세트의 가가 데이터 포인트에 너무 민감해져 새로운 데이터에 잘 일반화되지 못합니다.

2.2.1 모델 복잡도와 데이터셋 크기의관계

모델의 복잡도는 훈련 데이터셋에 담긴 입력 데이터의다양성과관련이깊습니다. 데이터셋에 다양한 데이터 포인트가 많을수록 과대적합 없이 더 복잡한 모델을 만들 수 있습니다. 보통 데이터 포인트를 더 많이 모으는 것이 다양성을 키워주므로 큰 데이터셋은 더 복잡한 모델을 만들 수 있게 해줍니다. 그러나 같은 데이터 포인트를 중복하거나 매우 비슷한 데이터를 모으는 것은 도움이 되지 않습니다.

2.3 지도 학습 알고리즘

2.3.1 예제에 사용할 데이터 셋

2.3.2 k-최근접 이웃
k-NN(k-Nearest Neighbors)알고리즘은 가장 간단한 머신러닝 알고리즘, 훈련 데이터셋에서 가장 가까운 데이터 포인트, 즉 '최근접 이웃'을 찾습니다.

2.3.3 선형 모델

희귀의 선형 모델
희귀를 위한 선형 모델은 특성이 하나일 땐 직선, 두 개일 땐 평면이 되며, 더 높은 차원(특성이 더 많음)에서는 초평면(hyperplane)이 되는 희귀 모델의 특징을 가지고 있습니다.

선형 희귀(최소제곱법)
선형 희귀(linear regression) 또는 최소제곱법(OLS, ordinary least squares)은 가장 간단하고 오래된 희귀용 선형 알고리즘입니다. 선형 희귀는 예측과 훈련 세트에 있는 타깃 y 사이의 평균제곱오차(mean squared error)를 최소하하는 파라미터 w와 b를 찾습니다. 평균제곱오차는 예측값과 타깃값의 차이를 제곱하여 더한 후에 샘플의 개수로 나눈 것입니다. 선형 희귀는 매개변수가 없는 것이 장점이지만, 그래서 모델의 복잡도를 제어할 방법도 없습니다.








2018년 1월 22일 월요일

1.7 첫 번째 애플리케이션: 불꽃의 품종 종류

붓꽃의 품종을 정확하게 분류한 데이터를 가지고 있으므로 지도 학습
몇 가지 선택사항(붓꽃의 품종) 중 하나를 선택
분류(Classfication), 출력될 수 있는 값(붓꽃의 종류)들을 클래스(class)
붓꽃 하나 에 대한 기대 출력은 꽃의 품종, 즉 품종을 레이블(Label)

1.7.1 데이터 적재


1.7.2 성과 측정: 훈련 데이터와 테스트 데이터
이 데이터로 머신러닝 모델을 만들고 새로운 데이터의 품종을 예측 하러 합니다. 하지만 만든 모델을 새 데이터에 적용하기 전에 이 모델이 진짜 잘 작동하는지 알아야 합니다. 다시 말해서 우리가 만든 모델의 예측을 신뢰할 수 있는 지 알아야 합니다.

불행이도 모델을 만들 때 쓴 데이터는 평가 목적으로 사용할 수 없습니다. 모델이 훈련 데이터를 그냥 전부 기억할 수 있으니 훈련 데이터에 속한 어떤 데이터라도 정확히 맞출 수 있기 때문입니다. 이렇게 데이터를 기억한다는 것은 모델을 잘 일반화 하지 않았다는 뜻입니다.(다른 말로는 새로운 데이터에 대해서는 잘 작동하지 않는다는 것입니다.)

모델의 성능을 측정하려면 레이블을 알고 있는 (이전에 본 적 없는) 새 데이터를 모델에 적용해 봐야 합니다. 이를 위해 우리가 가지고 있는 레이블된 데이터(150개의 붓꽃 데이터)를 두 그룹으로 나눈ㅂ니다. 그중 하나는 머신러닝 모델을 만들 때 사용하며, 훈련 데이터 혹은 훈련 세트(traning set)라고 합니다. 나머지는 모델이 얼마나 잘 작동하는지 측정하는 데 사용하며, 이를 테스트 데이터, 테스트 세트(test set)혹은 홀드아웃 세트(hold-out-set)라고 부릅니다.

scikit-learn은 데이터셋을 섞어서 나눠주는 train_test_split함수를 제공합니다. 이 함수는 전체 행 중 75%를 레이블 데이터와 함께 훈련 세트로 뽑습니다. 나머지 25%는 레이블 데이터와 함께 테스트 세트가 됩니다. 훈련 세트와 테스트 세트를 얼만큼씩 나눌지는 상활에 따라 다르지만 전체의 25%를 테스트 세트로 사용하는 것은 일반적으로 좋은 선택입니다.

1.7.3 가장 먼저 할 일: 데이터 살펴 보기
시각화는 데이터를 조사하는 아주 좋은 방법.산점도가 그중 하나입니다. 산점도는 데이터에서 한 특성을 x축에 놓고 다른 하나는 y축에 놓아 각 데이터 포인트를 하나의 점으로 나타내는 그래프. 아쉽게도 컴퓨터 화면은 2차원이라 한 번에 2개(혹은 3개)의 특성만 그릴 수 있습니다. 따라서 이 그래프는 3개 이상의 특성을 표현하기 어렵습니다. 대신 모든 특성을 짝지어 만드는 산점도 행렬을 사용할 수 있습니다.
이 그래프를 그리려면 먼저 NumPy 배열을 pandas의 DataFrame으로 변경해야 합니다. pandas는 산점도 행렬을 그려주는 scatter_matrix함수를 제공합니다.

1.7.4 첫 번째 머신러닝 모델: k-최근접 이웃 알고리즘
k-최근접 이웃 알고리즘에서 k 는 가장 가까운 이웃 '하나'가 아니라 훈련 데이터에서 새로운 데이터 포인트에 가장 가까운 'k개'의 이웃을 찾는다는 뜻

scikit-learn의 모든 머신러닝 모델은 Estimator라는 파이썬 클래스로 각각 구현되어 있습니다. k-최근접 이웃 분류 알고리즘은 neighbors 모듈 아래 KNeighborsClassifier 클래스에 구현되어있습니다. 모델을 사용하려면 클래스로부터 객체를 만들어야 합니다. 이때 모델에 필요한 매개변수를 넣습니다.
KNeighborsClassifier에서 가장 중요한 매개변수는 이숫의 개수입니다.

fit 메소드는 knn 객체 자체를 반환합니다.(그리고 knn객체 자체를 변경시킵니다.) 그래서 knn 객체가 문자열 형태로 출력됩니다. 이 출력에서 모델을 생성할 때 사용한 매개 변수를 볼 수 있습니다. 거의 모든 매개변수가 기본값이고 n_neighbors=1은 우리가 지정한 값입니다. scikit-learn 모델들이 많은 매개 변수를 가지고 있지만 대부분 성능을 최적화하거나 특별한 목적으로 사용합니다.

1.7.5 예측하기

1.7.6 모델 평가하기


2018년 1월 20일 토요일

1. 데이터 시각화 개념 잡기

데이터(Data)와 정보(Information), 지식(Knowledge)의 차이의 이해 와 데이터 시각화 연관성
- 데이터와 정보, 통찰의 차이
- 정보로 부터 지식으로서의 변환, 더 나아가 통찰까지
- 데이터의 수집, 처리, 조직화
- 데이터 시각화의 역사
- 시각화된 데이터가 어떻게 의사 결정에 도움이 되는가?
- 시각화의 구성

1) 데이터, 정보, 지식, 통찰

- 데이터
데이터는 디지털 형태를 가진, 별개으 ㅣ객관적 사실들, 여러 다른 방법으로 조직되고 배열될 수 있는 기본구성 요소로써, 비즈니스 과정에서 만나는 여러 문제 해결의 실마리가 될 수 있는 유용한 정보를 제공해 준다.

데이터는 매우 단순할 수도 크지 않을 수도 있고, 조직화되지 않을 수도 있다. 이런 개별적 데이터들은 그 자체로 의미를 가지지 못할 뿐만 아니라 더 중요한 데이터 간의 구조나 관계가 명시되지 않았기 때문에 의사 결정에 그대로 사용될 수 없다.

- 정보
정보는 비즈니스 문제를 해결하기 위한 목적으로 가공, 처리된 데이터이다. 데이터 간에 관계나 연관성을 부여함으로써 정보가될 수 있는데, 이런 연관성은 데이터에 문맥이나 배경을 부여함으로써 얻어질 수 있다. 데이터의 배경 정보는 데이터에 대한 질문에 답할 수 있게 하기 때문에 유용하다.

- 지식
지식은 인간이 정보를 이해하고조직화할 때 드러나게 되고, 의사 결정을 이끄는 데 사용된다. 지식은 데이터, 정보일 뿐만 아니라 경험을 통해 축적된 기술들도 포함하며 적절한 의사 결정을 내리는 능력, 그것을 실행하는 능력으로 이뤄진다.

지식의 필수적 구성요소인 '데이터의 연결'을 통해 각 정보 조각들 간의 상대적 중요성을 이해할 수 있게 된다. 과거의 결과와 비교함으로써, 패턴을 발견해 냄으로써 더 이상 문제를 처음부터 풀어낼 필요가 없게 된다.
지식은 점점 증가하는 방향으로 변하게 된다. 특히 정보가 재배열되거나 다시 조직화될 때, 혹은 연산 알고리즘이 변경되었을 때 변한다. 지식은 데이터로부터 추출된 과거 정보에의해 계산되는 알고리즘의 결과를 가림키는 화살곽 ㅏㅌ다. 지식 역시 그 결과들과 시각적으로 상화작용하며 얻어진다는 많은 예가 있다. 이렇게 지식은 과거에 기반한 반면에 통찰은 미래로 가는 길을 열어준다.

- 데이터 분석과 통찰
분석은 통찰을 이끌어 낼 수 있는 데이터들 간의관계를 결정짓는 수학적 알고리즘에 달려 있다. 통찰을 이해하기 위한 한 가지 간단한 방법은 유추를 고려하는 것이아. 데이터에 구조가 없거나 비즈니스와 잘 정렬되지 않았을 경우에, 유추는 데이터를 좀 더 구조적 형태로 바꿔주고 더욱 비즈니스 목ㄹ표와 가깝게 정렬되게 함으로써, 더 명확하고 깊이 이해할 수 있게 해준다. 통찰은 혁신적 결과를 가져주는 '유레카'의 순간이다. 한 가지 주의할 것은 분석과 비즈니스 인텔리전스를 혼동해선 안 된다. 분석은 예측 능력을 포함하는 데 반해 비즈니스 인텔리전스는 과거 데이터에 기반한 결과를 제공한다.

분석은 대개 데이터의 넓은 범위에 적용되며, 이런 이류로 내부적으로 혹은 외부적으로 데이터 협업이 매우 빈번하게 일어난다. 어떤 비즈니스 패러다임에서는 대규모의 데이터 셋 모음에서의 협업은 오로지 내부적으로 일어나다고 하지만 대부분의 경우 퍼즐을 갖추거나 각각의 점들을 연결하는 데에 있어 외부적 연결이 도움을 준다.ㅣ 가장 많이 사용되는 외부 데이터 소스 두 가지는 소셜 미ㅣㄷ어와 소비자 기반 데이터이다.

- 데이터의 변환
데이터는 다양한 카테고리가 있는데, 그 중에 과거 성능 데이터, 실험 데이터, 벤치마크 데이터가 있다. 과거 성능 데이터와 실험 데이터는 꽤 명백한 데이터인데 반해, 벤치마크 데이터는 두 개의 다른 항목이나 제품을 기준에 따라 측정, 비교해 얻은 데이터이다. 데이터가 정보로 변환돼 더 처리를 거치게 되면, 문제 해결에 사용된다.

- 데이터, 정보로의 변환
데이터에서 정보로의 변환은 수집, 처리, 조직화 과정을 포함하게 된다.
수집된 데이터는 어떤 처리와 조직화 과정을 필요로 하며, 그 결과 구조, 모델 혹은 패턴을 가지게 될 수도 있고, 그러지 않을 수도 있다. 그러나 최소한 이 과정을 통해 데이터에 관한 질문에 대한 답을 체계적으로 찾을 수 있다.

- 데이터 수집
데이터 수집은 시간이 걸리는 과정이다. 그래서 회사들은 데이터 수집을 자동화하기를 원한다. 그러나 사람이 직접 데이터를 수집하는 일이 아직까지는 일반적이다. 현대의 자동화 과정을 통한 데이터 수집은 센서와 같은 입력 장치들을 사용한다. 데이터 자동으로수집하는 또 다른 방법은 문서나 로그 파일을 스캔함으로써 가능하다. 웹 기반 방법을 통해 데이터베이스에 저장된 데이터를 수집하게 수종으로 처리하는 방식도 정보로 변환될 수 있다. 데이터베이스로 저장되는 웹 기반 방식을 통해 데이터가 수집되도록 처리하는 방식은 비로소 데이터가 정보로 변화하게 한다. 최근 웹 기반의 협업환경은 향상된 통신과 데이터 공유를 통해 혜택을 얻고 있다.

- 데이터 전처리
데이터 클리닝(data cleaning), 데이터 통합(data integration), 데이터 정리(data reduction), 데이터 변환(data transformation)과 같은 몇 가지 데이터 처리 기법이 있다.
데이터 클리닝은 데이터가 일관성을 가지도록 하고노이즈를 제거하기 위해 적용
데이터 통합은 다양한 출처로부터 얻어진 데이터들이 데이터 웨어하우스(data warehouse)와 같은 잘 알려진 일관적 서식을 갖도록 병합하고 결합나다. 데이터 정리는 병합, 종합 그리고 불필요한 특성들을 제거함으로써 데이터 크기를 줄일 수 있다. 데이터 변환은 적은 범위 안으로 데이터를 축소하기 위해 상둉될 수 있고, 이를 통해 데이터의 처리와 시각화에 있어 정확성과 효율성을 향상시킬 수 있다.
이상 검출(anomaly detection)은 수집된 데이터 중 예상되는 형태나 규칙 안에 속하지 않는 이상한 데이터들을 식별하는 것이다.
변칙은 아웃라이어(outliers)나 노이즈(noise)로 알려져 있다. 옐르 들어 신호 데이터에서 이상한 특정한 신호는 노이즈로 여겨지면, 거래 데이터에서는 사기성 거래가 아웃라이어가 된다. 정확한 데이터 수집은 데이터의 무결성(integrity)을 유지하기 위해 필수적이다. 변칙 데이터들의 부작용만큼, 이면적으로아웃라이어들은 매우 중요한데, 예를 덜어 특히 사기성 보험 청구의 경우에 매우 유용하다.



The Pandas Series

The Pandas Series data structure is a one-dimensional, heterogeneous array with labels, We can create a Pandas Series data structure as follows:

- Using a Python dict
- Using a NumPy array
- Using a single scalar value

When creating a Series, we can hand the constructor a list of axis labels, which is commonly referred to as the index. The index is an optional parameter. By default, if we use a NumPy array as the input data, Pandas will index values by auto incrementing the index commencing from 0. If the data handed to the constructor is a Python dict, the sorted dict keys will become the index. In the case of a scalar value as the input data, we are required to supply the index. For each new value in the index, the scalar input value will be reiterated. The Pandas Series and DataFrame interfaces have features and behaviors borrowed from NumPy arrays and Python dictionaries, such as slicing, a lookup function that uses a key, and vectorized operations. Performing a lookup on a DataFrame column returns a Series. We will demonstrate this and other features of Series by going back to the previous section and loading the CSV file again:


2018년 1월 19일 금요일

The Pandas DataFrames

A Pandas DataFrame is a labeled two-dimensional data structure and is similar in spirit to a worksheet in Google Sheets or Microsoft Excel, or a relational database table. The columns in Pandas DataFrame can be of different types. A similar concept, by the way, was invented originally in the R programming language.A DataFrame can be created in the following ways:

- Using another DataFrame.
- Using a NumPy array or a composite of arrays that has a tow-dimensional shape.
- Likewise, we can create a DataFrame out of another Pandas data structure called Series.
- A DataFrame can also be produced from a file, such as a file, such as a CSV file.
- From a dictionary of one-dimensional structures, such as one-dimensional NumPy arrays, list, dicts, or Pandas Series.


NumPy arrays

After going through the installation of NumPy, it's time to have a look at NumPy arrays. NumPy arrays are more efficient than Python lists when it comes to numerical operations. NumPy array are, in fact, specialized objects with extensive optimizations. NumPy code requires less explicit loops than equivalent Python code. This is based on vectorization.

If we go back to high school mathematics, then we should remember the concepts of scalars and vectors.  The number 2, for instance, is a scalar. When we add 2 to 2, we are performing scalar addition. We can form a vector out of a group of scalars. In Python programming terms, we will then have a one-operation on two arrays. This concept can, of course, be extended to higher dimensions Performing an operation on two

2018년 1월 17일 수요일

3. 확률 및 확률분포

가. 확률의 정의
확률이란 '특정사건이 일어날 가능성의 척도'라고 정의할 수 있다. 통계적 실험을 실시할 때 나타날 수 있는 모든 결과들의 집합을 표본공간(sample space, Ω)이라 하고, 사건(event)이란 표본공간의 부분집합을 말한다. 사건 중에서 오직 한 개의 원소로만 이루어진 사건을 근원사건이라 한다.

나. 조건부 확률과 독립사건
사건 A가 일어났다는 가정하의 사건 B의 확률은 조건부 확률(conditional probability)

다. 확률변수와 확률분포
특정 사건에 대해 실수값을 갖는 변수를 정의하면, 특정사건이 일어날 확률은 그 변수가 특정값을 가질 확률로 표현할 수 있다. 이와 같이 특정값이 나타날 가능성의 확률적으로 주어지는 변수를 확률변수(random variable)라고 한다. 수학적으로 표현하면, 확률변수는 정의역(domain)이 표본 공간이고 치역(range)이 실수 값인 함수다. 확률변수에는 이산형 확률변수(discrete random variable)와 연속형 확률변수(continuous random variable)가 있다.

- 이산형 확률변수: 사건의 확률이 그 사건들이 속한 점들의 확률의 합으로 표현할 수 있는 확률변수를 말한다. 따라서 이산형 확률변수는 확률이 0 보다 큰 값을 갖는 점들로 확률을 표현할 수 있다, 즉 이와 같이 각 이산점에 있어서 확률의 크기를 표현하는 함수를 확률질량함수(probability mass function)라고 한다.

- 연속형 확률변수: 사건의 확률이 그 사건 위에서 어떤 0보다 큰 값을 갖는 함수의 면적으로 표현될 수 있는 확률변수를 말한다. 이 때, 이 함수 f(x)를 확률밀도함수(probability density function)라고 한다. 사건의 확률이 확률밀도함수의 면적으로 표현되므로 한 점에서의 확률은 0이되고, 0보다 큰값을 갖는 사건은 구간에서의 확률값이 된다.

- 결합확률분포(joint probability distribution): 두 확률변수 X, Y의 결합확률분포는 이산형인 경우에 다음과 같의 정의한다.

연속형인 경우에는 f(x,y) 라고 정의하며, 각각 결합확률질량함수(joint probability mass function)와 결합확률밀도함수(joint probability density function)라고 한다.

통계 분석에서 자료를 수집하고 그 수집된 자료로부터 어떤 정보를 얻고자 하는 경우에는 항상 수집된 자료가 특정한 확률분포를 따른다고 가정한다. 그 분포는 이산형 확률분포와 연속형 확률변수로 구분할 수 있다. 먼저 이산형 확률변수에는 베르누이 확률분포(Bernoulli distribution), 이항분포(binomial distibution), 기하분포(geometric distribution), 다항분포(multinomial distribution), 포아송분포(Poisson distibution) 등이 있다.

라. 확률변수의 기댓값과 분산
확률변수X의 기대값은 다음과 같이 정의된다.



2018년 1월 16일 화요일

2. 통계 분석

통계 분석(statistical analysis)이란 특정한 집단이나 불확실한 현상을 대상으로 자료를 수집해 대상집단에 대한 정보를 구하고, 적절한 통계 분석 방법을 이용해 의사결정을 하는 과정을 말한다. 이러한 의사결졍을 통계학에서는 통계적 추론(statistical inference)이라고 한다. 대상 집단에 대한 정보란 자료를 요약.정리한 결과로 숫자 또는 그림으로 정리된 각종 통계를 의미한다. 또한 통계적추론이란 수집된 자료를 이용해 대상 집단(모집단)에 대해 의사결정을 하는 것이다. '대상 집단의 특성값(모수)이 무엇일까?'를 추측하는 추정(estimation)과 대상 집단에 대해 특정한 가설을 설정한 후에 그 가설의 채택여부를 결정하는 가설검정(hypothesis test)이 있다. 그 외에도 미래의 의 북확실성을 해결해 효율적인 의사결정을 하기 위해 수행하는 예측(forecasting)이 있다.

통계적 추론 이외에도 수집된 자료를 정리.요약하기 위해 사용되는 기초적인 통계를 기술통계( descriptive statistic)라고 한다. 기술 통계는 평균, 표준편차, 중위수, 최빈값, %와 같이 숫자로 표현하는 방식과 막대그래프, 원그래프, 꺽은선그래프 같이 그림으로 표현하는 방식이 있다. 신문이나 잡지에서 흔히 볼 수 있는 표, 그래프, 차트를 만드는 것은 모두 기술통계에 속한다. 기술통계는 그 자체로도 여러 용도에 쓰일 수 있지만, 대개는 보다 자세한 통계적 분석을 위한 사전단계의 역할을 하게 마련이다.

1. 통계 분석 개요

가. 통계학의 정의
우리는 일상생활에서각종 통계를 접하며 살고 있다. 일상적으로 접하는 통계는 매일 발표되는 일기예보와 물가.실업률.GNP 등과 같은 경제통계, 각 정당에 대한 지지도 조사나 가족법 개정에 대한 의식조사와 같은 사회조사 분석통계, 새로운 희귀병 치표제의 임상실험 결과와 같은 실험결과 분석통계 등 다양한 형태를 갖고 있다. 통계학을 한마디로 정의하기는 어렵지만 통계학은 자료로부터 유용한 정보를 이끌어 내는 학문이라는 데 대부분의 통계학자들이 동의할 것이다. 유용한 정보를 이끌어 내는 작업에는 자료의 수집과 정리, 그리고 이를 해석하는 방법 등을 모두 포함한다.

나. 모집단과 표본
자료로부터 유용한 정보를 이끌어 낼 때 해당 정보에 대한 대상이 있다. 정당에 대한 지지도에 관해 논의한다면 구체적으로 대한민국 전체 국민들의 지지도, 유권자들의 지지도, 또는 서울에 거주하는 유권자의 지지도를 일컫는 것인지를 확실하게 하는 것은 매우 중요하다. 이 때 유용한 정보의 대상이 되는 것을 모집단이라고 한다. 즉 모집단은 우리가 알고자 하는 전체를 의미한다. 모집단을 구성하는 개체를 추출단위 혹은 원소라고 한다.
모집단에 대해 조사하는 방법에는 총조사(census)와 표본조서로 나눈다. 충조사는 모집단의 개체 모두를 조사하는 방법으로 많은 비용과 시간이 소요되므로 '인구주택총조사'등 특별한 경우를 제외하고는 실시되지 않는다. 따라서 일부분만 조사하여 모집단에 대해 추론하는 것이 보통인데, 이런한 조사를 표본조사라고 하고 이 때 조사하는 모집단의 일부분을 표본(sample)이라 한다. 모집단에 대해 알고자 하는 값을 모수(parameter)라고 하고, 모수를 추론하기 위해 구하는 표본의 값들을 통계량(statistic)이라 한다.
모집단은 유한 모집단과 무한 모집단으로 나뉜다. 유한 모집단은 유한 개의 개체로 이루어진 모집단이고, 무한 모집단은 무한 개의 개체로 이루어진 모집단으로 보통 개념적으로 상정된 모집단을 지칭한다.

다. 표본추출의 방법
총조사가 아닌 표본조사를 바탕으로 분석한 결과를 사용하거나 이해할 때는 모집단의 정의, 표본의 크기, 조사방법(면접조사, 우편조사, 전화조사, 이메일 조사 등), 조사기간, 표본추출 방법을 명확하게 밝히거나 확인해야 한다. 이러한 사항들에 따라 분석 결과의 해석은 큰 차이가 발생할 수 있다. 이중에서도 표본조사에서 가장 주용한 것은 모집단을 대표할 수 있는 표본 추출이다. 표본을 추출하는 방법에는 여러 가지가 있지만 가장 대표적인 방법으로는 단순랜덤추출법(simple random sampling), 계통추출법(systematic sampling), 집락추출법(stratifiied sampling)등이 있다. 실무에서는 이 방법들을 혼합해 사용하고 있다.

- 단순랜덤추출법: N개의 원소로 구성된 모집단에서 n개(n<= N)의 표본을 추출할 때 각 원소에 1, 2, 3, ....N까지의 번호를 부여한다. 여기서 n 개의 번호를 임의로 선택해 그 번호에 해당하는 원소를 표본으로 추출한다.

-계통추출법:모집단의 모든 원소들에게 1, 2, 3, .....N의 일련번호를 부여하고 이를 순서대로 나영한 후에 K개(K=N/n)씩 n개의 구간으로 나눈다. 첫 구간(1, 2, 3,..,K)에서 하나를 임의로선택한 후에 K개씩 뛰어서 표본을 추출한다.

- 집락추출법: 모집단이 몇 개의 집락(cluster)이 결합된 형태로 구성돼 있고, 각 집단에서 원소들에게 일련번호를 부여할 수 있는 경우에 이용된다. 일부 집락을 랜덤으로 선택된 각 집락에서 표본을 임의로 선택한다.

- 층화추출법: 상당이 이질적인 원소들로 구성된 모집단에서 각 계층을 고루 대표할 수있도록 표본을 추출하는 방법이다. 이질적인 모집단의 원소들을 서로 유사한 것끼리 몇 개의 층(stratum)으로 나눈 후, 각 층에서 표본을 랜덤하게 추출한다.

표본조사 이외에 자료를 수집하는 방법으로 실험이 있다. 표본조사가 대상 집단의 일부를 추출해 어떤 현상을 관측 또는 조사해 자료를 수집하는 방법인데 비해, 실험이란 특정 목적 하에서 실험 대상에게 처리를 가한 후에 그 결과를 관측해 자료를 수집하는 방법이다. 새로운 강의방법이 기존의 강의방법에 비해 쇼과적인지를 확인하기 위해 임의의 2개 학급을 선정해 새로운 강의방법과 기존 강의방법으로 일정기간 강의한 후 시험을 보고 성적을 조사한다.새로운 암 치료제의 효과를 분석하기 위해 암환자 20명을 임의적으로 10명씩 두 집단으로 나누고, 한 집단에는 새로운 암 치료제를 투여하고 다른 집단에는 아무 효과가 없는 가짜약을 투여한 후에 치료효과를 분석하는 등의 방식으로 실험이 실시되고 있다.

라. 자료의 종류
표본조사나 실험을 실시하는 과정에서 추출된 원소들이나 실험 단위로붜 주어진 목적에 적합하도록 관측해 자료를 얻는 것을 측정(measurement)이라고 한다. 측정방법은 크게 명목철도(nominal scale), 순서척도(ordinal scale), 구간척도(interval scale), 비율척도(ration scale)로 구분할 수 있다. 명목척도와 순서척도로 측정된 자료를 질적 자료(qualitative data)라고 하고, 구간척도와 비율척도를 측정된 자료를 양적자료(quantitative data)라고 정의한다.

- 명목철도: 측정 대상이 어느 집단에 속하는지 분퓨할 때 사용되는 척도로, 성별(남, 여) 구분, 출생지(서울특별시, 부산광역시, 경기도 등) 구분 등이 명목척도에 해당된다.

- 순서척도: 측정 대상의 특성이 가지는 서열관계를 관측하는 척도로, 선택사항이 일정한 순서로 돼 있다. 특정 서비스의 선호도를 (아주 좋아한다, 좋아한다, 그저 그렇다, 싫어한다, 아주 싫어한다)로 구분해 묻는 경우에 관측된 자료가 순서척도에 해당된다.

- 구간척도: 측정 대상이 갖고 있는 속성의 양을 측정하는 것으로 측정결과가 숫자로 표현되나 해당 속성이 전혀 없는 상태인 절대적인 원점이 없다. 따라서 두 관측값 사이의 비율은 별 의미가 없게 되는 척도로 온도, 지수 등이 구간척도에 해당된다.

- 비율척도: 절대적 기준인 0값이 존재하고 모든 사칙연산이 가능하며 제일 많은 정보를 가지고 있는 척도이다. 무게, 나이, 연간소득, 제품가격 등 숙자로 관측 되는 일반적인 자료의 특성이 비율척도에 해당 된다.


2018년 1월 15일 월요일

제3절 결측값 처리와 이상값 검색

데이터를 다루다 보면 결측값이나 이상값이 존재한다. 이러한 경우에 효율적인 방법으로 처리하여 데이터의 정보가 손실되거나 왜곡되는 것을 피해야 한다.

1. 데이터 탐색
데이터를 본격 분석하기 전에 대략의 데이터의 특성을 파악하고, 데이터에 대한 통찰을 얻기 위해 다각도로 접근하도록 한다.

가. 데이터 기초 통계
summary 함수를 통해 연속형 변수의 경우 4분위수, 최소값, 최대값, 중앙값, 평균 등을 출력하고 범주형 변수의 경우 각 범부에 대한 빈도수를 출력하여 데이터의 분포를 파악한다. 연속형 변수의 경우 cov와 cor함수를 통해 공분산행렬과 상관계수행렬을 출력하여 변수 간의 선형 상관관계의 강도를 확인한다.

2. 결측값 처리
결측값(Missing data) 처리를 위해 시간을 많이 쓰는 것은 비효율적이다. 가능하면 결측값은 제외하고 처리하는 게 적합하지만 결측값 자체가 의미가 있는 경유도 있다. 결측값을 어떻게 처리하느냐는 전체 작업속도에 많은 영향을 주기 때문에 이 부분을 자동화 하면 업무 효율성이 매우 향상돈다. R에서 결측값 처리 관련 패키지는 Amelia 2, Mice, mistools 등 여러 가지가 있는데, 여기서는 Amelia 패키지를 사용했다.
우선 결측값을 확인하는 방법과 제외하는 간단한 방법부터 알아보자. R에서는 결측값을 NA(not avaliable)로 처리한다. 불가능한 값(예를 들면 dividing by zero)은 NaN(not a number)으로 처리된다.
결측값을 입력하는 방법은 NA를 이용하면 되고, is.na를 이용해 결측값인지 여부를 확인할 수 있다.

3. 이상값 검색
이상값(Outlier) 검색은 분석에서 전처리를 어떻게 할지를 결정할 때와 부정사용방지 시스템(Fraud Detection System, FDS)에서 규칙을 발견하는 데 사용할 수 있다. 이상값은 의도하지 않게 잘못 입력한 경우(a1), 의도하지 않게 입력됐으나 분석 목적에 부합되지 않아 제거해야 하는 경우(a2), 의도되지 않은 현상이지만 부석에 포함해야 하는 경우(a3)가 있다. 그리고 의도된 이상값(b1)인 경우가 있는데, b1의 경우는 대부분 사기(fraud)이다. 특히 a1, a2는 bad data라고 할 수 있고 a3, b1이 이상값이라고 할 수 있다.
관련 알고리즘으로는 ESD(Extreme Studentized Deviation), MADM등이 있는데 ESD가 가장 잘 알려져 있다. 평균으로부터 k*표준편차만큼 떨어져 있는 값들을 이상값으로 판단하고 일반적으로 k는 3으로 한다.
그러나 이 방법조차도 이상값으로부터 매우 민감한 단점이 있다.
실전에서 이상값을 찾기 위해 너무 많은 시간을  쓰는것은 추천하지 않느다. 변수들에 대해 summary 정도로 평균과 중위수 값을 파악해 제 1 사분위수 (Q1)와 제 3 사분위수 (Q3)을 보면 1차 판단을 하고, 좀 더 ㅅ간이 된다면 주요 변수(dimension)별로 플롯해보면서 특성을 파악할 수 있다. 단 부정사용방지 프로젝트(fraud detection project)에서는 많은 시간을 여기에 할당해야 한다.
a2 경우의 대표전인 경우로 POS 데이터에서 수작업으로 일정 시간에 일괄적으로 거래정보를 입력하는 경우 시간대별 매출 분석에서는 제외해야 되고, 고객 행동분석에서는 a3에 해당돼 포함해서 분석을 해야한다. 그러나 이러한 경우의 조합이 다양해져 변수가 많아지면 표준 데이터를 기준으로 작업하지 못하고 경우에 따라 데이터가 달라지므로 의사결정을 해야 한다.
또 다른 대표적인 경우로 불량이나 분실로 발생된 상품을 별도 고객명으로 가상 입력하는 경우이다. 특정 고객이 매우 많은 상품을 구매한 것으로 잘못 처리돼 전체 분석에 영향을 미치는 경우도 있다. 미리 상세하게 담당자에게 문의하지 않으면 알 수 없는 다양한 비즈니스 규칙도 있고, 물어도 고의로 대답을 안 하거나 모르는 경우가 크게 영향을 미칠 수 있다. 결국 일정 시간을 할애 분석 기준을 수립하고, 해당 기준에 의거해 드러나지 않는 것은 무시하고 진행해야 된다. 그렇지 않으면 분석 데이터와 결과 자체가 모두 엉망이 돼 관리가 불가능해진다.


2018년 1월 14일 일요일

CHAPTER 1 소개(파이센 라이브러를 활요한 머신러닝)

머신러닝은 데이터에서 지식을 추출하는 작업.

1.1 왜 머신러닝인가?

직접 규칙 생성시 두가지 커다란 단점.(규칙 기반 전물가 시스템, 3세대 인공지능)

- 결정에 필요한 로직은 한 분야나 작업에 국한.(작업이 조금만 변경되더라도 전체 시스템을 다시 개발해야 할 수 있음)
- 규칙을 설계하려면 그 분야 전문가들이 내리른 결정 방식 참조

1.1.1 머신러닝으로 풀 수 있는 문제
지도학습 알고리즘 : 이미 알려진 사례를 바탕으로 일반화된 모델을 만들어 의사 결정 프로세스를 자동화하는 것

비지도학습 알고리즘 : 입력은 주어지지만 출력은 제공되니 않음.

샘플(sample) 또는 데이터포인트(data point): 하나의 개체 혹은 행
특성: 샘플의 속성

1.1.2 문제와 데이터 이해하기
머신러닝 프로세스에서 가장 중요한 과정은 사용할 데이터를 이해하고 그 데이터가 해결해야 할 문제가 어떤 관련이 있는지를 이해하는 일.

1.2 왜 파이썬인가?
범용 프로그램 언어로서 파이썬은 복잡한 그래픽 사용자 인터페이스(GUI)나 웹 서비스도 만들 수 있고 기존 시스템과 통합하기도 쉽다.


1.3 scikit-learn(http://scikit-learn.org/stable/user_guide.html  , http://sckikit-learn.org/stable/modules/classes.html)
오픈소스인 skikit-learn은 자유롭게 사용 및 배포
산업 현장이나 하계에도 널리 사용
많은 튜토리얼과 예제코드를 쉽게 접할 수 있음.

1.3.1 scikit-learn 설치

Anaconda (http://www.continuum.io/annaconda-overview)
대용량 데이터 처리, 예측 분석, 과학 계산용 파이썬 배포판

Enthought coanopy(http://www.ehthought.com/products/canopy/)
무료버젼에는 scujut-learn이 비 포함, 학생과 학위 수여가 되는 기관 종사자는 Enthought Canopy의 유료 버젼을 무료로 받을수 있음.

Python(x,y) (http://python-xy.github.io/)
원도우 환경을 위한 과학 계산용 무료 파이씬 배포판

1.4 필수 라이브러리와 도구들
scikit-learn: 파이썬 과학 라이브러리
NumPy, SciPy, matplotib

1.4.1 주피터 노트북

1.4.2 NumPy
NumPy(http://numpy.org/): 과학 계산을 필요한 패키지. 다차원 배열을 위한 기능과 선형 대수 연산과 푸리에 변환 같은 고수준 수학 함수와 유사 난수 생성기를 포함.

1.4.3 SciPy(http://www.scipy.org/scipylib)
SciPy는 과학 계산용 함수를 모아놓은 파이썬 패키지

2. sqldf를 이용한 데이터 분석

R에서 sqldf는 표준 SQL에서 사용되는 문장이 모두 가능하고, 데이터 이름에 "."같은 특수문자가 들어간 경우 ''로 묶어주면 테이블처럼 간단히 처리할 수 있다.

3. plyr
plyr은 데이터를 분리하고처리한 다음, 다시 결합하는 등 가장 필수적인 데이터 처리기능을 제공한다.
apply 함수와 muti-core 사용 함수를 이용하면 for loop를 사용하지 않고 매우 간단하고 빠르게 처리할 수 있다. plyr은 apply 함수에 기반해 데이터와 출력변수를 동시에 배열로 치환하여 처리하는 패키지이다. 예를 들어 ddply 함수는 데이터 프레임 데이터를 가공해 데이터 프레임으로 돌려준다. 데이터별 plyr함수들은 아래와 같다.
- d = 데이터 프레임 (data.frame)
- a = 배열 (array)
- l = 리스트 (list)
따라서 ddply는 데이터 프레임을 입력 받아서, 그것을 분리(split)하거나 그 외 어떤 처리를 한 후 데이터 프레임으로 출력하게 한다. 일반적으로 데이터 프레임을 많이 다루기 때문에 ddply를 많이 쓴다. 마찬가지로 ldply는 리스트를 입력받아서 어떤 처리를 한 후에 데이터 프레임으로 출력하게 한다. 이러한 관계를 다음표로 요약할 수 있다. 여기에서 열(column)은 입력되는 데이터 형태를 말하며, 행(row)는 출력되는 데이터 형태를 말한다.

입력되는 데이터 형태
                                                       데이터 프레임                         리스트                 배열
                                                       (data.frame)                           (list)                 (array)
데이터 프레임(data.frame)                   ddply                                  ldply                 adply
리스트 (list)                                         dlply                                   llply                   alply
배열 (array)                                         daply                                  laply                  aaply

4. 데이터 테이블
데이터 테이블(data.table)은 데이터 프레임과 유사하지만 보다 빠른 그룹화(grouping)와 순서화 (ordering), 짧은 문장 지원 측면에서 데이터 프레임보다 매력적이다. 하지만 무조건 빠른 것이 아니므로 특성에 맞게 사용해야 한다. 특히 64비트 환경에서 RAM이 충분히 많을 때는 효율적이다.


1. R reshape를 활용한 데이터 마트 개발

데이터 마트란 데이터의 한 부분으로서 특정 사용자가 관심을 갖는 데이터들을 담은 비교적 작은 규모의 데이터 웨어하우스이다. 즉, 일반적인 데이터베이스 형태로 갖고 있는 다양한 정보를 사용자의 요구 항목에 따라 체계적으로 분석하여 기업의 경영 활동을 돕기 위한 시스템
데이터 마트는 전체적인 데이터 웨어하우스에 있는 일부 데이터를 가지고 특정 사용자를 대상으로 한다.
데이터 웨어하우스와 데이터 마트의 구분은 사용자의 기능 및 제공 범위를 기준으로 한다.

데이터 마트 개발에 대해 논하기에 앞서 데이터의 reshape에 대해서 간단하게 설명하고자 한다. 어떤 데이터는 여러 개층 또는 수준으로 그룹화를 시킬 수 있거나 다양한 관점에서 살펴볼 필요가 있다. 예를 들면 같은 데이터를 반복 측정한 경우 수집된 데이터를 관측하고자 하는 변수 기준으로 살펴볼 수도 있고 매 회의 반복을 기준으로 살펴볼 수도 있는 것과 같은 원리이다. 이런 방식의 데이터 탐색을 용일하게 수행하기 위해서는 데이터 셋에 대한 일종의 변형이 필요하다. 어떤 변형을 어떻게 수행해야 할 것인지 정확하게 정의 내리긴 어려울지 몰라도 분석에 임하는 사람들이라면 기존의 데이터 셋과는 다른 새로운 무언가가 필요하다고 직관적으로 느낄 것이다. resphape는 이와 같이 데이터 재정렬을 위한 기법의 하나이다. reshape와 비견될 수 있는 개념 중 하나는 밀집화(aggregation)인데 reshape보다는 밀집화가 우리에게 좀 더 친숙하고 쉽게 수행되고 있는 방법이다. 밀집화 기법을 이용하면 복잡한 데이터를 더 단순하고 사용하기 편리한 상태로 축소하거나 재정렬 할 수 있다. 가장 대표적으로 사용되는 밀집화 기법의 하나가 Excel의 Pivot Table 기능이다. 그러나 이런 밀집화 기법을 사용하면 데이터가 간단명료하게 표시되기는 하지만 기존 데이터가 가지고 있던 더 많은 정보들을 손실하게 된다. 이와 달리 reshape는 데이터 재정렬을 수행하되, 원래 데이터가 가지고 있는 모든 정보들을 그대로 유지한다는 것이 차이점이다. R에는 다양한 방식으로 reshape를 수행할 수 있는 명령어들이 여럿 존재하지만, 적재적소에 올바른 명령어를 사용하기에 어려움이 많았다. 'reshape' 패키지는 이러한 문제를 극복한 reshape방법의 하나로서 이 장에서는 데이터 마트 개발에 바로 이 'reshape'패키지를 이용해보고자 한다. 한편, 여기에서 설치한 reshape패키지는 R에 미리 내재되어 있는 명령문 reshape(Resahpe Grouped Data)와는 다르다는 것을 유념하길 바란다.

- reshape
reshape패키지는 단지 melt와 cast만을 사용하여 데이터를 재구성하거나 밀집화된 데이터를 유연하게 생성해준다. reshape는 기존 데이터 구조를 column-wise하게 전환하는데, 크게 melt와 cast 단계로 구분된다.


2018년 1월 13일 토요일

2, 기본 사용법

가. R과 R Studio의 구성
1) R의 구성
2) R Studiio의 구성

나. R 패키지 설치하기
R은 오픈 소스 프로그램이므로 다양한 개인들이 자신들만의 함수로 여러 기능을 제작하여 누구나 설치할 수 있는 패키지의 형태로 배포하고 있다. 이를 통해 최신 통계 이론을 적용한 패키지를 설치하여 분석을 실시할 수도 있고 각종 복잡한 그래프 설정에 대해 미리 정의해둔 패키지를 설치하면 복잡한 그림들을 손쉽게 그릴 수도 있다. 또한 기본 프로그램인 R(base)에서 지원하지 않는 명령어나 함수를 사용할 수 있으며 유용한 데이터셋이 내장되어 있는 패키지를 이용할 수도 있다.

R 패키지를 설치하기 위해 상단 메뉴바의 패키지툴을 클릭하고 패키지(를 ) 철치하기... 를 클릭한다. CRAN 미러사이트가 설정되어있지 않다면 CRAN 미러사이트를 지정하는 창이 뜬다. 미러사이트 설정되면 현재 설치할 수 있는 모든 패키지들의 목록이 알파벳순서로 나열된다. 설치하고자 하는 패키지를 찾아 선택하고 OK 버튼을 클릭하면 자동적으로 패키지 설치가 진행된다.

R Studio를 이용하면 패키지 설치도 간편하게 진행할 수 있다. 우측 하단 인터페이스의 Packages 탭을 클릭한 후 Install을 클릭하면 창이 새로 나타난다. 이 창에 패키지 이름을 입력하면 설치가 진행된다. 패키지 이름은 대소문자를 구별한다는 점에 유의하자.
또한 아래와 같은 명령어를 사용해서 패키지를 설치할 수도 있다. 이 경우 명령어를 실행하면 위와 마찬가지로 CRAN 미러사이트를 지정해주는 창이 나오고 선택된 미러사이트에서 패키지를 다운로드 받아 설치한다.
패키지의 이름을 정확하게 알고 있는 경우 이 코드를 직접 실행시키는 방법이 가장 빠르고 간편하게 패키지를 설치할 수 있는 방법이다.
>install.packages("패키지 이름"

패키지를 설치한 후에는 패키지를 R 콘솔에 불러와야 패키지에 포함된 함수나 데이터셋을 사용할 수 있다. 설치된 패키지는 다음 명령어를 이용하여 R 콘솔로 불러온다.
>library(패키지 이름)

패키지를 설치하는 명령어와 패키지를 불러오는 명령어에 따옴표 사용 유무가 다르므로 잘 확인하여야 한다. R Studio의 경우 패키지를 설치한 이후 우측 하단의 Package 탭의 목록 중에 불러오고자 하는 패키지의 이름 앞에 있는 체크박스를 클릭하면 자동적으로 위 코드를 실행시키며 패키지를 불러온다.

다. R 도움말(help)

라. R 언어와 문법
R 언어는 S 언어와 유사하며 C 언어와도 유사하기 때문에 다른 언어를 통한 프로그래밍에 익숙한 사람이라면 여러 가지 명령어를 직관적으로 적용할 수 있어 쉽게 사용이 가능하다. 그러나 프로그래밍을 처음 접해 보는 사람이라면 익숙해지기까지 시간이 필요할 것이다.

1) R의 데이터 구조
R은 다양한 형태의 데이터 구조를 다룰 수 있다. Transaction, Rules, Logical 등 다양항 형태의 데이터 구조가 존재하지만 그 중에서도 R에서 가장 주로 사용되는 데이터 구조인 벡터, 행렬, 데이터 프레임에 대해 살펴보자.

(1) 벡터
벡터 데이터 구조는 하나의 스칼라값, 혹은 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합을 의미한다. 이 때 벡터 데이터 내에 들어갈 수 있는 원소는 숫자, 문자, 논리 연사자 등이 될 수 있다. 숫자로 이루어진 벡터는 숫자 벡터가 되고 문자로 이루어진 벡터는 문자 벡터가 된다. R에서 다루는 데이터 구조 중 가장 단순한 형태이며 명령어 c를 이용해 선언할 수 있다. 이때, 'c'는 concentration(연결)을 의미한다.
>x = c(1, 10, 24, 40)
>y = c("사과", "바나나", "오렌지")
>z = c(TRUE, FALSE, TRUE)

이 경우 x는 숫자형 벡터, y 는 문자형 벡터, z는 논리 연산자 벡터가 된다. 논리 연산자 벡터를 숫자형 벡터처럼 사용하는 경우 자동적으로 "TRUE"는  1의 값을 할당 받으며 "FALSE"는 0의 값을 할당받는다. R은 대문자와 소문자를 구분하여 인식하기 때문에 논리 연산자를 입력할 때는 반드시 모든 글자를 대문자로 기입하여야 논리연산자로 인식한다는 점에 유의하자. 등호 '='의 경우 우측의 값을 죄측의 변수에 할당한다는 의미로서 조금 더 직관적인 형태로 '<- p="">>x <- 10="" 24="" 40="" c="" p="">>y <- c="" p="">>z <- c="" false="" p="" true="">
또한 다음과 같이 c 명령어를 이요하여 벡터와 벡터를 결합하여 새로운 벡터를 형성할 수도 있다. 벡터를 결합하여 행렬을 이루도록 하는 방법도 존재하는데, 이에 대해서는 다른 절에서 다루도록 한다. 형식이 같은 벡터를 합치면 합쳐진 벡터의 형식도 이전과 동일한 형식을 따르지만, 합치는 벡터에 문자형 벡터가 포함되면 합쳐지는 벡터는 문자형 벡터가 된다. 아래 코드의 예에서 숫자형 벡터인 x와 문자형 벡터인 y를   xy라고 벡터로 전환되었기 때문에 이 값들을 숫자가 아닌 문자 데이터로 인식하게 된다.
> x <- 10="" 24="" 40="" c="" p="">> y <- c="" p="">> xy <- c="" p="" x="" y="">> xy
[1] "1"   "10"   "24"   "40"  "사과"  "바나나"  "오렌지"

(2)행렬
행렬은 행과 열을 갖는 m x n 형태의 직사각형에 데이터를 나열한 데이터 구조이다. 행렬의 선언을 위해 명령어 matrix 를 사용한다. matrix 명령어의 첫 번째 인수는 행렬에 들어가는 데이터들을 묶어놓은 벡터가 할당되며 ncol 옵션으로 열(column)의 수르 정하거나 nrow 옵션으로 행(row)의 수를 정해 행렬의 크기를 사용자가 원하는 대로 지정할 수 있다. 기본적으로 값들은 열을 우선 채우는 방향으로 입력된다 (즉, 1행 1열, 2행 1열, 3행 1열....1행2열, 2행2열...의 순서). 아래 코드를 살펴보면 행렬형 변수 'mx'는 1,2,3,4,5,6이라는 여섯 개의 원소를 갖는 행렬이 되며 ncol=2 옵션을 통해 2열짜리 (원소가 총 6개이므로 열의 개수가 2개인 것이 정해지면 행의 수도 3개로 자동적으로 정해진다) 행렬이 만들어 진다. 결과를 살펴보면 다음과 같다. 3행 2열이 만들어 졌으며 1, 2, 3, 4, 5, 6의 값이 열을 우선 채우는 방향으로 채워 넣어졌다. 만약 행을 우선 채우는 방향을 원하면, byrow=T 옵션을 추가하면 된다.

> mx = matrix(c(1, 2, 3, 4, 5, 6), ncol=2)
> mx

         [,1]     [,2]
[1,]       1       4
[2,]       2       5
[3,]       3       6

명령어 rbind와 cbind를 사용해 이미 만들어져있는 벡터를 서로 합쳐 행렬을 만들 수도 있다. rbind의 'r'은 'row'를 의미하는데 기존의 행렬에 행을 추가하는 형태로 데이터를 결합시킨다. cbind의 'c'는 'column'을 의미하는데 기존의 행렬에 열을 추가하는 형태로 데이터를 결합시킨다. 다음 예제 코드를 살펴보자. 우선 rbind 명령어를이용하여 이미 생성된 3행 2열의 행렬 'mx'에 1행 2열의  r1벡터를 추가하여 4행 2열의 행렬을 생성한다. 또한 cbind 명령어을 이용하여 기존의 행렬 'mx'에 3행 1열의 c1벡터를 추가하여 3행 3열의 행열을 생성한다.

> mx

         [,1]     [,2]
[1,]       1       4
[2,]       2       5
[3,]       3       6

> r1 = c(10, 10)
> c1 = c(20, 20, 20)
> rbind(mx, r1)

         [,1]     [,2]
[1,]       1       4
[2,]       2       5
[3,]       3       6
 r1       10     10
> cbind(mx, c1)

         [,1]     [,2]    c1
[1,]       1       4     20
[2,]       2       5     20
[3,]       3       6     20

행렬과 벡터 뿐 아니라 벡터와 벡터 역시 동일한 방법으로 합쳐 새로운 행렬을 형성할 수 있다. 이 때 합쳐지는 벡터들의 행의 수와 열의 수를 잘 파악하여 명령어를 적절하게 사용해야 한다. 또한  rbind 와 cbind  명령어는 기본적으로 같은 데이터 타입의 벡터들은 행렬의 형태로 합쳐주지만, 이 명령어들을 이용해 다음에 소개한 데이터 프레임을 서로 합치는 경우에는 그대로 데이터 프레임의 형태로 데이터를 합쳐준다.

(3) 데이터 프레임
데이터 프레임은 행렬과 유사한 2차원 목록 데이터 구조이다. 다루기가 쉽고 한번에 많은 정보를 담을 수 있어 R에서 가장 널리 사용된다. 행렬과는 다르게 각 열이 서로 다른 데이터 타입을 가질 수 있기 때문에 데이터의 크기가 커져도 사용자가 다루기 수월하다. 명령어 data.frame을 이용하면 여러 개의 벡터를 하나의 데이터 프레임으로 합쳐 입력할 수 있다.
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">> income = c(100, 200, 150, 300, 900)
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">> car = c("kia", "hyudai", "kia", "toyota", "lexus")
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">> marriage =  c(FALSE, FALSE, FALSE, TRUE, TRUE)
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">>mydat = data.frame(income, car, marriage)
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">
위 코드에서 선언되는 income 벡터는 숫자형 벡터이다. car 벡터는 "kia", "hyundai", "toyota", "lexus"의 값을 원소르 갖는 문자형 벡터이며 marriage는 논리 연산자 벡터이다. data.frame 명령어를 이용해 세 벡터를 합쳐 하나의 데이터 프레임인 mydat을 생성했다. 생성된 데이터 프레임인 mydat의 출력 형태는 다음과 같다. 각 행이 하나의 곽측치를 의미하고 각 열이 하나의 변수라고 가정하면 데이터 프레임은 분석자에게 상당히 친숙한 형태를 띠고 있음을 알 수 있다.

> mydat

                 income              car              marriage
1                     100            kia                FALSE
2                    200            hyundai        FALSE
3                    150             kia                FALSE
4                    300            toyota          TRUE
5                    900            lexus            TRUE

2) 외부 데이터 불러오기
데이터를 저장하는 파일 형식은 다양하다. R은 다양한 형태의 외부 데이터를 불러올 수 있다. 데이터 저장을 위해 주로 많이 사용되는 csv파일, txt파일, 엑셀의 xls/xlsx파일을 R로 불러오는 방법에 대해서 알아보자.

(1) csv파일 불러오기
명령어 read.table을 이용하면 csv파일을 R에 데이터 프레임 형태로 불러올 수 있다. csv파일의 구성에 따라 다양한 옵션을 이용하면 데이터가 작성된 형태 그래로 불러올 수 있다. header=T 옵션을 이용하면 csv파일의 첫 줄을 변수명으로 지정할 수 있다. 또한 sep=','옵션을 통해 데이터가 쉼표로 구분된 데이터 파일 (즉, csv파일)임을 지정해준다. read.table 명령어를 이용할 때는 파일 경로에 \ 대신 \\를 사용함에 유의한다. 혹은 \\ 대신 /을 사용해도 무관하다. 아래 코드를 통해 data1이라는 데이터 프레임이 생성되며 해당 경로의 csv파일을 그대로 불러오게 된다.
data1 <- example.csv="" header="T," p="" read.table="" sep=",">
혹은 유사한 명령어인 read.csv를 이용할 수도 있다. 사용법은 read.table과 비슷하지만 sep=","를 통해 구분자를 명시할 필요가 없다.

(2) txt파일 불러오기
명령어 read.table을 이용하여 txt파일 역시 데이터 프레임의 형태로 불러올 수 있다. 이 경우 sep=','옵션을 사용하지 않으면 csv파일이 아닌 일반 txt파일을 불러올 수 있다. txt파일을 데이터셋의 형태로 불러올 때는 txt파일이 구분자나 형식 등을 잘 지켜서 작성되어 있어야 한다. 아래 코드에서 선언되는 data2라는 데이터 프레임은 해당 경로의 텍스트 파일을 불러온다.
data2 <- example.txt="" p="" read.table="">
(3) 엑셀 파일 (xls/xlsx) 불러오기
엑셀 파일을 불러오는 방법은 크게 두 가지이다. 첫번째 방법은 엑셀 파일을 엑셀로 실행시킨 뒤 csv파일 형식으로 저장하여 앞의 csv파일 불러오기 방법으로 불러오는 방법이다. 엑셀을 사용할 수 없거나 이 방법이 번거롭다면 두 번째 방법으로 R에서 지원하는 패키지를 설치하여 엑셀 파일을 직접 불러올 수도 있다. 아래의 방법은 RODBC라는 패키지를 이용해 불러오는 방법이지만 이 외에도 엑셀 파일을 불어올 수 있도록 만들어 주는 패키지는 다양하다. 경로에 저장되어 있는 mydata.xls 파일을 불러오는 코드는 다음과 같다.
> library(RODBC) #패키지 열기
> new <- c:="" data="" mydata="" odbcconnectexcel="" p="">> yourdata <- heet1="" new="" p="" sheet="" sqlfetch="">> close(new)

library 명령어를 통해 RODBC 패키지를 연다. 이후 odbcConnectExcel 명령어와 sqlFetch 명령어를 이용하여 엑셀 파일의 워크시트를 설정하여 불러올 수 있다. 엑셀 파일의 경로를 입력하는 경우 확장자를 생략하고 작성해야 하는 점에 유의한다. 또한 엑셀 파일의 워크시트 이름은 대소문자를 구분하므로 정확하게 작성해야 한다. R의 패키지와 라이브러리를 설치하는 방법에 대해서는 뒤의 "라. R 패키지 설치하기" 에서 설명할 것이다.

3) R의 기초 함수
R에는 다양한 함수들이 존재하며 이 함수들을 적절하게 이용해 자신이 구현하고자 하는 통계적 기법이나 데이터 처리를 진행 할 수 있다. 여러 가지 함수들 중 가장 기본이 되는 몇 가지 함수들을 살펴보자. 이러한 기초 함수들은 복잡한 함수나 프로그램을 젝작하는데 있어 볼트와 너트처럼 어디에나 사용되므로 잘 익혀둘 필요가 있다.

(1) 수열 생성하기
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">복잡한 계산이나 알고리즘의 구현을 위해서는 다양한 형태의 숫자들을 반복적으로 생성해주는 수영 생성 함수들을 알아두어야 한다. rep 함수는 기본적으로 두 개의 인수를 갖는데, 첫 번째 인수를 두 번째 인수만큼 반복하는 숫자 벡터를 생성한다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> rep (1, 3)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 1  1  1
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">seq 함수 역시 기본적으로 두 개의 인수를 갖는데, 첫 인수부터 두 번째 인수까지 1씩 증가하는 수열의 숫자 벡터를 생성한다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> seq (1, 3)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 1  2  3
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">seq (1, 3)은 간단하게 1:3과 같은 형태로 사용할 수도 있다. a:b 라는 함수는 seq 함수의 첫 번째 인수가 a이고 두 번째 인수가 b인 경우와 가은 결과를 생성한다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> 1: 3
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 1  2  3
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
seq 함수에 by=n 옵션을 추가하여 1씩 증가하는 수열이 아닌 n씩 증가하는 수열을 생성할 수 있다.
> seq ( 1, 11, by=2)
[1] 1  3  5  7  9  11
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">seq 함수에 length=m 옵션을 추가하면 전체 수열의 개수가 m개가 되도록 자동적으로 증가하는 수열을 생성할 수 있다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">>seq (1, 11, length=6)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 1  3  5  7  9  11
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">>seq (1, 11, length=8)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 1.000000   2.428571   3,857143  5.285714  6.714286  8.142857  9.571429  11.000000
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">req 함수에 연속 증가하는 seq 함수의 형태를 인수로 사용하여 다음과 같은 수열을 생성할 수 있다. 이경우 수열 2:5, 즉 2, 3, 4, 5가 3번 반복된다는 것을 알 수 있다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> rep(2:5, 3)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1] 2 3 4 5 2 3 4 5 2 3 4 5
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">(2) 기초적인 수치 계산
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">R에는 행렬 계산을 비롯해 다양한 형태의 수치 계산을 위한 함수와 명령어가 준비되어있다. 간단한 형태의 벡터와 행렬을 생성하여 여러 수치 계산 기능들에 대해 살펴보도록 하자. 아래 코드를 통해 기본적인 사칙연산이 수행되는 원리를 알 수 있을 것이다. 기본적으로 벡터와 벡터의 사칙연산을 수행하는 경우 연산되는 벡터들의 길이가 같아야 한다.
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> a = 1: 10
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> a 
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch=""> [1]  1  2  3  4  5  6   7   8   9   10
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> a + a
 [1]  2  4  6  8  10  12  14  16  18  20
> a - a
 [1]  0  0  0  0  0  0  0  0  0  0
> a * a
 [1] 1  4  3  16  25  36  49  64  81  100
> a / a
 [1]   1  1  1  1  1  1  1  1  1  1

R에서 벡터를 생성할 때는 기본적으로 열벡터가 만들어진다.. 아래 코드에서는 3행 1열의 열벡터 행렬을 생성하고, 이 행렬의 전치행렬 t(a), 즉 1행 3열의 행벡터 행렬을 생성한 후 두 행렬에 대해 서로 행렬곱을 실히해 3행 3열의 행렬을 만들어 보도록 한다. t 명령어를 통해 주어진 행렬의 전치행렬(transpose matrix)을 구할 수 있고 %*%를  통해 두 행렬 사이의 행렬곱을 실시할 수 있다.

> a = c(2, 7, 3)
> a
 [1]  2  7  3
>t(a)
        [, 1]  [, 2]  [,3]
[1,]     2       7     3
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> A = a%*t(a)
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">> A
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">        [, 1]  [, 2]  [, 3]
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[1 ,]    4      14     6
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[2 ,]  14     49    21
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">[3 ,]   6      21     9
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">행렬 A에 대해서 *를 통해 연산을 실시하면 단순한 스칼라 곱의 결과를 얻을 수 있다. 또한 solve 명령어를 통해 주어진 행렬의 역행렬(inverse matrix)을 계산할 수 있다.
> mx = matrix(c(23, 41, 12, 35, 67, 1, 24, 7, 53), nrow = 3)
>mx

        [, 1]  [, 2]  [, 3]
[1 ,]    23    35     24
[2 ,]   41     67       7
[3 ,]   12       1      53

> 5 * mx
         [, 1]      [, 2]      [, 3]
[1 ,]    115       175        120
[2 ,]   205     335         35
[3 ,]    60          5        265

>solve(mx)
                       [, 1]                  [, 2]                   [, 3]
[1 ,]  -0.35743822     0.18466969       0.13746848
[2 ,]   0.21069087   -0.09389813     -0.08300555
[3 ,]   0.07695411    -0.04004034    -0.01069087


R에서는 짧은 명령어를 이용해 기초적인 기술통계량들을 간편하게 계산할 수 있다. a라는 벡터를 다음과 같이 생성하고 이 벡터에 대하 기초 통계량들과 통계 계산에서 주로 사용되는 연산들에 대한 계산법을 살펴보자.
> a = 1: 10
> a
  [1]  1  2  3  4  5  6  7   8  9  10

mean,  var, sd 함수는 각각 입력한 벡터의 평균, 분산, 표준편차를 계산해 준다.
> mean(a)
  [1]  5.5
> var(a)
  [1]  9.166667
> sd(a)
  [1]  3.02765

sum, median, log 함수를 이용해서 각각 입력한 벡터들의 합, 중앙값, 자연로그값을 계산 할 수 있다.

> sum(a)
 [1] 55

> median(a)
 [1] 5.5

>log(a)
 [1]  0.000000   0.6931472   1.0986123   1.3862944   1.7917595   1.9459101
 [8]   2.0794415   2.1972246   2.3025851

서로 다른 두 벡터에 대해서는 cov, cor 함수를 사용해 공분산과 상관계수를 구할 수 있다.
> b=log(a)
> cov(a,b)
[1] 2.112062
> cor(a,b)
[1] 0.9516624

또한 summary 함수를 이용하면 주어진 벡터에 대해 각 사분위수와 최소값, 최대값, 중앙값, 평균을 계산 할 수 있다. summary 함수는 숫자 벡터에 사용하면 단순히 사분위수를 계산하는 기능을 하지만 다른 형태의 데이터 타입에도 사용할 수 있다. 이 때 summary 함수는 해당 대상에 대한 정보를 요약해주는 기능을 한다.
>summary(a)
         Min.            1st Qu,             Median            Mean          3rd Qu.            Max.
        1.00              3.25                5.50                5.50           7.75                 10.00

4) R 데이터 핸들링
R은 객체지향의 언어이기 때문에 변수(객체)를 불러오거나 변수 내의 요소들을 참조하는 것이 직관적이고 간단하다. 이를 이용하면 분석 기법을 적용하기 위한 빅데이터도 직관적으로 핸들링 하는 것이 가능하다.
여러 종류의 변수에 대해 기본적인 핸들링 방법을 살펴보자.

(1)벡터형 변수
예제로 'b'라는 문자형 벡터를 다음과 같이 생성하여 이 벡터에 대해 각 요소들을 핸들링 하는 방법을 살펴본다. 문자형 벡터 b에는 "a", "b", "c", "d", "e" 다섯 개의 문자 값이 포함되어 있다.

>b = c ("a", "b", "c", "d", "e")
>b
 [1]   "a"  "b"  "c"  "d"  "e"

b[n]과 같이 벡터 뒤에 대괄호 []를 붙여 숫자를 지정해 주면 b벡터 내에서 n번째 원소에 해당하는 값을 불러온다. b[-n]과 같이 대괄호 안에 -를 붙이고숫자를 지정해주면 n번째 원소에 해당하는 값만을 제외하고 b벡터를 불러온다. 대괄호 안에는 하나의 숫자뿐 아니라 여러 개의 원소를 불러오고자 할 때는 c 명령어를 사용하여 해당 원소값이 있는 위치를 나열해 주면 된다.
>b [ 2 ]
 [1]  "b"
>b [ -4 ]
 [1] "a"  "b"  "c "  "e"
>b [ c(2,3) ] #벡터의 2, 3번째 위치 값을 선택한다.
  [1]  "b"  "c"

(2) 행렬/데이터 프레임 형태의 변수
형렬형 변수나 데이터 프레임 형태의 변수에 대해서도 대괄호를 통한 특정 원소/요소의 참조가 가능하다. 먼저 다음과 같이 mydat이라는 데이터 프레임을 생성한다.
> income = c(100, 200, 150, 300, 900)
> car = c("kia", "hyundai", "kia", "toyota", "lexus")
> marriage = c(FALSE, FALSE, FALSE, TRUE, TRUE)
> mydat = data.frame(income, car, marriage)
> mydat
                income             car             marriage
1                  100               kia                 FALSE
2                 200       hyundai                 FALSE
3                 150                kia                 FALSE
4                300           toyota                 TRUE
5                900             lexus                  TRUE

기본적인 방식은 벡터형 변수를 다룰 때와 동일하다. 그러나 행렬형/데이터 프레임형 변수의 경우 대괄호 안에 [m,n]의 형식으로 두 개의 숫자를 사용하여 불러오고자 아는 자료의 행과 열을 지정해주어야 한다.
아래 예제를 참고하자. 이 경우에도 마찬가지로 [-m,   ] 또는 [  ,  -n]의 형태로 대괄호 안의 숫자에 - 를 붙여 해당 행이나 열만을 제외하고 데이터를 불러올 수도 있지만, [-m,  -n]처럼 행과 열을 모두 지정하여 하나의 원소만을 제외할 수는 없다. 또한 대괄호 안에 하나의 숫자뿐 아니라 여러 개의 숫자(숫자형 벡터)도 적용시킬 수 있다.

5) 반복 구문과 조건문
R의 함수 작성에 있어서 특정 조건 하에서 비슷한 작업을 반복하게 하는 구문, 또는 일정한 조건이 만족되면 다른 작업을 수행하도록 만들어주는 구문들을 활용하면 복잡한 계산이나 작업을 용이하게 처리할 수 있는 함수를 만들 수 있다. 다양한 반복 구문과 조건문이 존재하며 상황에 맞게 적절한 구문을 사용하면 프로그램이 작동되는 시간을 줄여 효율적인 프로그래밍이 가능해진다.

(1)for  반복 구문
> a = c( )  #아무런 값도 포함되지 않는 a 벡터 선언
>for (i in 1:9){
+ a[i] = i * i
+ }
>a
 [1]   1  4  9  16  25  36  49   64  81

> isum=0
> for ( i in 1:100) {
+ isum = isum + i
+ }
>cat("1부터 100까지의 합=", isum, "입니다.", "\n")
1부터 100까지의 합= 5050입니다.

(2)while 반복 구문
> x=1
> whilie (x <5 p="">+ x = x +1
+ print( x )
+ }
[1]  2
[1]  3
[1]  4
[1]  5

(3)if ~ else 조건문
> StatScore = c(88, 90, 78, 84, 76, 68, 50, 48, 66, 88, 96, 79, 65, 27, 88, 96,
33, 64, 48, 77, 64, 88, 95, 79, 88, 49, 30, 29, 10, 49, 88)
>over70 = rep(0,40) #1
>for(i in 1:40){
+ if ( StatScore[ i ] >= 70) over70[ i ] = i #2
+ else over70[ i ] = 0 }
> over70
[1] 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0
[29] 1 0 1 1 1 1 0 0 0 0 1
>sum(over70)
[1] 18

6) 사용자 정의 함수
function 명령어를 이용하면 기존에 존재하는 함수 외에도 사용자가 직접 복잡한 함수를 구성하여 사용할 수 있다. '함수 이름 = function(x, y, z)'의 형식으로 선언하며 이 때 괄호 안의 x, y, z는 함수 구문에서 인수(argument)로 사용된다. 간단한 사용자 정의 함수 코드를 살펴보자. 이 코드는 입력한 인수a 까지의 합을 계산해 주는 함수 addto를 선언한다.

> addto = function(a){
+ isum =0
+ for ( i in 1:a) {
+ isum = isum + i
+ }
+ print (isum)
}
>addto(10)
[1] 5050
>addto(50)
[1] 1275

7) 기타 유용한 기능들
R에는 이 외에도 많은 기능들이 존재하기 때문에 도움말이나 관련 교재를 참고한다면 분석자가 생각하는 알고리즘을 R로 구현하는 데는 큰 어려움이 없을 것으로 보인다. 마지막 절에는 아직 소개하지 않은 다양한 기능들 중에서도 특히, 프로그래밍 코드 중간에 사용되어 아주 복잡할 것 같은 프로그래밍을 간단하고 가능하게 해주는 유용한 기능들에 대해 소개하고자 한다. 이러한 기능들을 적재적소에 유용하게 사용하면 고급 프로그래머로서 더빠르고 효율적으로 작동하는 프로그램을 설계할 수 있을 것이다.

(1)paste
paste 명령어는 입력받은 문자열들을 하나로 붙여준다. 'sep=' 옵션을 통해 붙이고자 하는 문자열들 사이에 구분자(separator)를 삽입시킬 수 있다. 이 명령어를 이용하면 복잡한 알고리즘을 통해 생산되는 결과물들을 더 알기 쉽고 보기 좋게 출력하도록 할 수 있다.

>number=1:10
>alphabet=c("a", "b", "c")
>paste(number, alphabet)
 [1] "1 a" "2 b" "3 c" " 4 a" "5 b" "6 c" "7 a" "8 b" "9 c" "10 a"
>paste(number, alphabet, seq=" to the ")
 [1] "1 to the a" "2 to the b" "3 to the c" "4 to the a" "5 to the b" ......

(2)substr
주어진 문자열에서 특정 문자열을 추출
>substr("BigDataAnalysis", 1, 4)
 [1] "BigD"

>country=c("Korea", "Japan", "China", "Singapore", "Russia")
>substr(country, 1,3)
 [1] "Kor" "Jap"  "Chi"  "Sin"  "Rus"

(3) 자료형 데이터 구조 변환
R에서의 객체는 다양한 형태를 가질 수 있다. 예를 들어 문자형 변수, 실수형 변수, 논리 연산자, Factor, 데이터 프레임 등이 있다. 주어진 객체의 데이터 구조를 다른 구조로 바꾸자 할 때 다음과 같은 함수들을 사용해 변환할 수 있다.
- as.data.frame(x): 데이터 프레임 형식으로 변환한다.
- as.list(x): 리스트 형시으로 변환한다.
- as.matrix(x): 행렬 형식으로 변환한다.
- as.vector(x):벡터 형식으로 변환한다.
- as.factor(x):팩터(factor) 형식으로 변환한다.


> as.integer(3.14)
 [1] 3
> as.numeric("foo")
 [1] NA
경고메시지:
강제형벼환에 의해 생성된 NA입니다.

> as.character(101)
 [1] "101"
> as.numberic(FALSE)
 [1] 0
> as.logical(0.45)
 [1] TRUE

다음과 같이 as.matrix함수를 이용해 데이터 프레임을 행렬로 변환할 수도 있다. 문자형 데이터만이 저장되는 행렬로 변환되었으므로 데이터 프레임에서 숫자형 값으로 인식되던 변수들도 문자형으로 강제 전환된다. 다음 예제에서 데이터 프레임을 구성하고 있는 세 개의 백터에서 income열은 숫자형 벡터, car열은 문자형 벡트, marrage 열은 논리형 벡터의 형태로 구성되어 있지만, as.matrix 함수를 이용해 행렬로 변환된 이후에는 income열과 marriage 열의 데이터들도 모두 문자형 데이터로 변환되었다.
>mydat
      income              car            marriage
1          100              kia                 FALSE
2         200      hyundai                 FALSE
3         150               kia                 FALSE
4         300        toyota                  TRUE
5         900           lexus                 TRUE

>as.matrix(mydat)
              income              car           marriage
[1, ]            "100"            "kia"           "FALSE"
[2, ]           "200"   "hyundai"            "FALSE"
[3, ]           "150"             "kia"           "FALSE"
[4, ]           "300"       "toyota"           "TRUE"
[5, ]           "900"         "lexus"            "TRUE"

(4)문자열을 날짜로 변환
"2015-01-13"처럼 문자열 표현으로된 날짜 데이터를 실제 날짜의의미를 지니는 Date 객체로 변환해보자.
Date 객체를 통해 입력된 날짜 데이터는 시계열 부석이나 시간 요소를 포함하고 있는 그림을 그릴 때 유용하게 사용될 수 있다. 앞서 본 다른 변환들과 유사하게 as.Date 라는 함수를 통해 이 기능을 할 수 있지만, 그 전에 입력되는 문자열의 형식에 대해 알아야 한다. as.Date는 기본 문자열이 yyyy-mm-dd일 거라고 가정한다. 그 외의 다른 형식을 처리하려면 'format=' 옵션을 통해 입력되는 날짜의 형식을 지정해 주어야한다. 예를 들어 날짜가 미국에서 주로 사용하는 mm/dd/yy 형태로 구성되어 있다면 다음과 같이 옵션 'format="%m/%d/%Y"를 사용해야 한다.

- Sys.Date(): 현재 날짜를 반환한다.
- as.Date(): 날짜 객체로 변환한다.

> as.Date("2014-01-13")
 [1] "2015-01-13"
> as.Date("01/13/2015")
다음에 오류가 있습니다charToDate(x) : 문자열이 표준서식을 따르지 않습니다.
> as.Date("01/13/2015", format="%m/5d/%Y)
 [1] "2015-01-13"

(5) 날짜를 문자열로 변환
문자열을 날짜로 변환하여 사용할 수 있는 것처럼 날짜를 나타내는 Date객체 또한 문자열로 변환하여 사용할 수 있다. 분석의 결과물을 출력할 때 분석이 실시된 날짜를 기입하거나 날짜별로 데이터셋을 관리하는 등 다양한 응용법이 있을 수 있다. format 명령어를 통해 날짜 외에도 다양한 데이터의 포맷을 변경할 수 있다. format이 가진 기능은 아주 다양하지만 이해하기에 그다지 어렵지 않으며 자주 사용되는 기능은 아니기 때문에 이와 관련된 설명은 R 도움말을 통해 각자 살펴보도록 하자.

- format(데이터, 포맷)
- as.character()

> as.Date("08/13/2013", format="%m/%d/%y")
 [1] "2015-01-13"
> format(Sys.Date())
 [1] "2015-01-13"
> as.character(Sys.Date())
 [1] "2015-01-13"
> format(Sys.Date(), format="%m/%d/%Y")
 [1] "01/13/2015"

> format(Sys.Date(), '%a')  #'%a'는 요일을 출력한다.
 [1] "화"
> format(Sys.Date(), '%b')  #'%b'는 월을 출력한다.
 [1] "1"
> format(Sys.Date(), '%m')  #'%m'은 두자리 숫자로 월을 출력한다.
 [1] "01"
> format(Sys.Date(), '%d')   #'%d'는 두 자리 숫자로 일을 출력한다.
 [1] "13"
> format(Sys.Date(), '%y')   #'%y'는 두자리 숫자로 연도를 출력한다.
 [1] "15"
> format(Sys.Date(), '%Y')   # '%Y'는 네자리 숫자로 연도를 출력한다.
 [1] "2015"

마. R 그래픽 기능
R은 다른 통계 분석 프로그램들에 비해 그래픽 기능이 다양하고 자유자재로 그림을 그릴 수 있다는 장점이 있다. 다양한 종류의 그래프들을 그릴 수 있으며 이렇게 다양한 그래프에 대해 아주 세세한 부분까지 설정할 수 있다. 또한 전문적으로 그래프 그리기에 특화된 패키지를 설치하여 사용하면 상용 프로그램 수준의 그래프를 그릴 수도 있다. 축을 설정하고 기본적인 선을 긋거나 색을 변경하는 등의 낮은 단계(Low Level) 그래픽 함수들과 이를 이용하여 하나의 완성된 그래프를 구현할 수 있는 높은 단계 (High Level) 그래픽 함수가 있다. 높은 단계의 그래픽 함수들은 그 사용법이 매우 복잡하여 해당 함수를 지원하는 각각의 패키지에 이에 따른 전문적인 설명이 포함되어 있으므로 이 장에서는 다루지 않고, 간단한 몇 개의 그래픽 함수들을 살펴본다. 일반적으로 명령어를 이용해 그림을 새로 그려내는 경우 R에서는 별도의 창이 생성되어 그림이 나타나고 R Studio에서는 생성되는 모든 그림들을 우측 하단 Plot탭에서 볼 수 있다.

1) 산점도 그래프
plot(x, y) 함수는 x에 대한 y의 그래프를 그려준다. plot(y~x)라는 형태로도 마찬가지의그래프를 그릴수 있다.

> height = c(170,168,174,175,188,165,165 ,190,173,168,159,170,184,155,165)
> weight = c(68, 65, 74, 77, 92, 63, 67, 95, 72, 69, 60, 69, 73, 56, 55)
> plot(height, weight)

2) 산점도 행렬
여러 가지 변수들에 대해서 각각의 산점도를 한눈에 살펴볼 수 있도록 확장된 산점도 행렬이다. 여러 변수들을 한 공간에 표현하기 위해서는 4차원, 5차원의 공간이 도입되어야 하므로이를 극복하기 위해 도입된 그래프이다. 산점도 행렬은 pairs명령어를 이용해 바로 그릴 수 있으며 아래 코드에서는 좀 더 보기 좋은 그림을 위해 다양한 옵션이 사용되었다. "main=' 옵션은 그래프의 최상단에 제목을 표기해 준다. 'pch='옵션은 그래프 상에 찍히는 점의 모양을 변경해준다. 'bg=' 옵션을 이용해 iris 데이터의 Species에 따라 서로 다른 색상을 부여했다.
<5 p="">> pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",
<5 p="">+  pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
<5 p="">
<5 p="">이러한 그래프의 형태는 옵션에 따라 원하는 모양을 다양하게 만들어낼 수 있다. 또한 특정한 패키지를 설치해 이미 준비된 형태의 완성도 높은 그림을 손쉽게 그려낼 수도 있다.
<5 p="">
<5 p="">3) 히스토그램과 상자그림
<5 p="">탐색적 자료 분석에서 자료의 분포를 손쉽게 확인하는 방법으로히스토그램을 그려보거나 상자 그림을 그려보는 방법이 있다. 히스토그램과 상자 그림은 간편한 코드를 이용하여 손쉽게 그려볼 수 있다. 그림을 그리는 것 자체는 아주 단순하지만 사용자의 입맛에 맞게 축을 조절하거나 간격을 조절하고 색을 입히는 것은 해당 함수의 옵션을 통해 가능하다. 히스토그램과 상자 그림을 위한 기본적인 코드는 다음과 같다.
<5 p="">> StatScore = c(88, 90, 78, 84, 76, 68, 50, 48, 33, 70, 48, 66, 88, 96, 79, 65, 27, 88, 96,
<5 p=""> 33, 64, 48, 77, 18, 26, 44, 48, 68, 77, 64, 88, 95, 79, 88, 49, 30, 29, 10, 49, 88)
<5 p="">> hist( StatScore, prob=T)
<5 p="">> boxplot( StatScore )
<5 p="">
<5 p="">hist 함수는 히스토그램을 그려주는 함수이며 기본적으로 세로축(Y축)에 도수를 표기한다. prob=T 옵션을 통해 상대도수를 표시하도록 변경할 수 있다. boxplot 함수는 상자 그림을 그려준다. 
<5 p="">
<5 p="">

   




<- example.csv="" header="T," p="" read.table="" sep=","><- example.txt="" p="" read.table=""><- c:="" data="" mydata="" odbcconnectexcel="" p=""><- heet1="" new="" p="" sheet="" sqlfetch="">
<- p=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" false="" p="" true=""><- 10="" 24="" 40="" c="" p=""><- c="" p=""><- c="" p="" x="" y="">

2018년 1월 9일 화요일

1. 분석 화경의 이해

가. 통계 패키지 R
R은 통계 분석 과정에서 수행되는 복잡한 계산이나 시각화 기법을 쉽게 사용할 수 있도록 설계된 무료 소프트웨어이다. 통계학자나 데이터 분석 전문가들이 주로 사용하며 행렬 계산을 위한 도구로서도 사용될 수 있는데 이 경우 계산 성능 측면에서는 우수한 결과를 보여준다. R은 무료로 사용할 수 있는 오픈소스 소프트웨어라는 장점과 기본으로 제공되는 기능 외에도 사용자들이 직접 제작한 패키지를 이용하여 무수히 많은 기능들을 사용할 수 있도록 확장되는 점, 사용 소프트웨어나 출력물에 견주어도 뒤쳐지지 않는 정도의 강력한 시각화 요소를 갖추고 있다는 점을 무기로 최근 들어 그 인기가 점차 증가하고 있다.

나. R의 역사
R의 역사를 알기 위해서는 S라는 통계 프로그래밍 언어에 대한 이야기를 할 필요가 있다. 'S'는 1976년 AT&T의 Bell Labs Statistics Group에서 John Chamber, Rick Becker와 Allan Wilks가 "to turn ideas into software, quickly and faithfully."라는 목표로 자체 개발한 통계 프로그래밍 언어이다. 그 전까지 대부분의 통계 계산은 Fortran의 서브루틴을 통해 수행되었다. 1976년 최초 개발된 무명의 S는 "Statistical Computing System", "Statistical Analysis System"(그러나 이 이름은 지금의 "SAS System"이 이미 사용하고 있었다), "Interactive SCS" 등의 후보를 거쳐 'S'라는 이름으로 불리게 되었다.
이 'S'라는 이름은 Statistical computing의 머리글자이기도 했지만, 그 당시 같은 기관에서 설계하고 있던 또 다른 프로그래밍 언어와의 연관성을 강조하기 위해 한 글자의 알파벳으로 된 이름을 채택하고자 했기에 선택된 이름이기도 했다. 그 또 다른 프로그래밍 언어가 바로 C언어이다.
1988년 S의 문법 구조나 언어에 많은 변경이 있었으며 객체라는 개념이 도입되기 시작했다. "The New S Language"(Blue Book 출판)라는 책이 출간되어 함수에서 매크로까지 전반적인 기능들에 걸쳐 'New S' 에서 변경된 사항들을 소개했지만 사용자들이 이 'New S'로의 이주를 탐탁지 않게 생각했다. 많은 부분에 생겨난 변화 때문에 기존 사용자들이 사용하고 있던 대부분의 코드를 새로 작성해야 했기 때문이다. 그러던 중 R이 탄생한다.
R은 1993년 뉴질랜드 University of Auckland 에서 Ross Inaka와 Robert Gentleman에 의해 개발된 소프트웨어인데 'Scheme'이라는 언어로부터 렉시컬 스코드(정적 스코프)의 개념을 도입한 또 다른 S언어 프로그램이었다. 이 'R'이라는 이름은 두 개발자 Ross Inaka와 Robert Gentleman의 머리글자에서 따왔으며 S보다 한 단계 발전되었다는 의미에서 알파벳 S보다 앞선 R을 차용했다는 의미도 포함하고 있다. R이 발표되던 당시에도 S언어를 도입한 프로그램들은 계속 존재했었다. 1988년 TIBCO Software Inc. 에서 출시되어 계속 버전업을 거듭한 S-Plus라는 프로그램이 유명했고 최초의 S 역시도 S3, S4등의 후속 프로그램이 출시되었지만 이들은 모두 상용 프로그램이었다.
그런데 R이 처음 발표된지 2년째되던 해인 1995년, R은 자유 소프트웨어 재단(Free Software Foundation)의 GNU 일반 공중 사용 허가서 (GPL, GNU Public General License)로 인해 무료로 공개되었다. 또한 기존 프로그램을 사용하기 위해 대부분의 코드를 실행시킬 수 있었다. 이후로도 R은 대부분의 UNIX계열 플랫폼에 다채롭게 대응하도록 컴파일 되어 Windows는 물론 Linux나 Mac OS를 지원하며 저변을 넓혔다. 그리고 꾸준히 버젼업을 거듭하며 S4나 S-Plus를 체치고 현재는 S언어 기반 프로그램 중 가장 널리 사용되고 있으며 패키지를 통한 확장성 때문에 그 가능성 또한 높게 평가받고 있다. R은 사용자들이 직접 패키지를 계속 만들어서 새로운 기법들을 생성하고 있기 때문에 버전이 계속 갱신되고 있다.

다. R의 특징
R은 무료 소프트웨어이면서도 고차원적인 계산이 가능하며 통계 분석과 시각화에 최적화 된 환경을 통해 단순한 계산부터 복잡한 통계 기법까지 폭넓게 다룰 수 있다. R의 가장 강력한 특징들 몇 가지를 살펴보면 다음과 같다.

1) 그래픽 처리
R은 상용 소프트웨어에 버금가는 상당한 수준의 그래프와 그림을 그릴 수 있다. 기본적인 그래픽 관련 옵션들이 충실하게 갖춰져 있기 때문에 그림의 용도와 역할에 맞게 적절한 그래프를 언제든지 쉽게 생산할 수 있으며 매우 세부적인 부분까지 사용자가 직접 지정하여 섬세한 작업을 수행할 수 있다. 또한 출판물로 사용해도손색이 없을 정도의 고해상도 이미지를 생산함에도 그 처리 시간이 매우 빠르기 때문에 단순히 분석과정에서 뿐만 아니라 보고서 작성이나 발표 자료 작성 시에도 유용하게 사용할 수 있다.

2) 데이터 처리 및 계산 능력
R은 벡터(Vector), 행렬(Matrix), 배열(Array), 데이터 프레임(Data Frame), 리스트(List)등 다양한 형태의 데이터 구조를 지원하므로 다양한 형태의 분석에 대응하기 좋다. 또한 복잡한 구조 내의 개별 데이터에 접근하는 절차가 간단하므로 큰 데이터를 핸들링 하기도 간편하다.

3) 패키지
R에는 패키지라는 개념이 있어 사용자들이 스스로 개발하는 새로운 함수들을 패키지의 형태로 내려 받아 사용할 수 있다. 일반적으로 패키지는 하나의 목적을 가지고제작이 되는데 특정 분석 기법을 사용하기 위해 하나의 패키지를 설치하면 해당 분석에 필요한 과정들을 수행할 수 있는 함수가 패키지에 포함되어 있는 형식이다. 이러한 확장성 덕분에 다른 통계 프로그램에 비해 최신 이론이나 기법을 사용해보기가 더 쉽다. 연구자들이 자신의 기법을 패키지화 해서 올리기만 한다면 누구나 해당 패키지를 통해 그 기법을 사용해 볼 수 있기 때문이다. 또한 쉽게 사용할 수 없는 강력한 그래픽 처리를 원하는 경우에도 패키지의 형태를 적용하여 복잡하고 어려운 옵션이 적용된 고급 그래픽 기능들을 이요해 간편하게 처리할 수 있다.

라. R Studio
R Studio는 R을 사용하는 통합 개발 환경 (Integrated Development Environment; IDE)중의하나이다. IDE를 사용하면 R을 조금 더 간편하고확장된 기능을 가지는 환경에서 실행할 수 있다. 특히 R Studio는 메모리에 저장되어있는 변수의 정보에 바로 접근하여 변수 내에 저장된 값들을 살펴보거나 수정할 수 있으며 특별한 명령어 없이도 변수의 정보에 대해 바로 알 수 있다. 또한 스크립트를 관리하고 문서화하기가 수월해진다. R이 오픈 소스 프로그램이며 다양한 운영체제를 지원하는 것과 마찬가지로 R Studio 역시 무료로 사용할 수 있고 다양한 운영체제를 지원한다.

7. 분석 교육 및 변화관리

최근 구성원들에게 데이터 분석 교육을 받도록 독려하는 기업이 늘고 있다. 엔지니어가 입사하면 코드베이스나 개발 문화를 교육시키는 엔지니어 훈련(Engineering Bootcamp)프로그램을 운영하는 경우이다. 더 나아가 엔지니어뿐만 아니라 마케팅, 기획, 서비스, 관리 등 모든 부서의 구성원을 대상으로 데이터 분석 훈련 프로그램을 운영하기도 한다. 이런 배경에는 모든 구성원들이 직접 데이터를 보고, 분석하고 가설을 검증할 수 있는 능력을 갖춤으로써 데이터 활용을 통한 비즈니스 가치를 전사적으로 확대하기 위해서다.

예전에는 기업 내 데이터 분석가가 담당했던 일을 모든 구성원이 데이터를 분석하고 이를 바로 업무에 활용할 수 있도록 조직 전반에 분석 문화를 정착시키고 변화시키려는 시도로 볼 수 있다. 그림에서 보는 바와 같이 새로운 체계의 도입 시에는 저항 및 기존 형태로 되돌아가는 관성이 존재하기 때문에 분석의 가치를 극대화하고 내재화하는 안정적인 추진기로 접어들기 위해서는 분석에 관련된 교육 및 마인드 육성을 위한 적극적인 변화 관리가 필요하다.

빅데이터의 등장은 많은 비즈니스 영역에서 변화를 가져왔다. 이러한 변화에 보다 적극적으로 대응하기 위해서는 기업에 맞는 적합한 분석 업무를 도출하고 가치를 높여줄 수 있도록 분석 조직 및 인력에 대한 지속적인 교육과 훈련을 실시하여야 한다. 또한 경영층이 데이터에 기반 한 의사결정을 할 수 있는 기업문화를 정착시키려는 변화관리를 지속적으로 계획하고 수행하여야 한다.

분석 교육의 목표는 단순한 툴 교육이 아닌 분석 역량을 확보하고 강화하는 것에 초점을 맞추어 진행되어야 한다. 그림과 같이 분석 기획자에 대한 데이터 분석 큐레이션 교육, 분석 실무자에 대한 데이터 분석 기법 및 도구에 대한 교육, 업무 수행자에 대한 분석기회 발굴 및 시나리오 작성법 등 분석적인 사고를 업무에 적용할 수 있도록 다양한 교육을 통해 조직 구성원 모둥에게 분석기반의 업무를 정착시킬 수 있어야 한다. 이를 통해 데이터를 바라보는 관점, 데이터 분석과 활용 등이 기업문화로 자연스럽게 스며들게 확대 되어야 한다.



6. 분석 과제 관리 프로세스 수립

분석 마스터 플랜이 수립되고 초기 데이터 분석 과제가 성공적으로 수행되는 경우, 지속적인 분석 니즈 및 기회가 분석 과제 형태로 도출 될 수 있다. 이런 과정에서 분석 조직이 수행할 주요한 역할 중의 하나가 분석 과제의 기획 및 운영이므로 이를 체계적으로 관리하기 위한 프로세스를 수립해야 한다.

분석 과제 관리 프로세스는 크게 과제 발굴과 과제 수행 및 모니터링으로 나누어진다. 과제 발굴 단계에서는 개별 조직이나 개인이 도출한 분석 아이디어를 발굴하고 이를 과제화하여 분석 과제 풀(Pool)로 관리하면서 분석 프로젝트를 선정하는 작업을 수행한다. 과제 수행 단계에서는 분석을 수행할 팀을 구성하고 분석 과제 실행 시 지속적인 모니터링과 과제 결과를 공유하고 개선하는 절차를 수행한다.

분석 조직이 지속적이고 체계적인 분석 과제 관리 프로세스를 수행함으로써 조직 내 분석 문화 내재화 및 경쟁력을 확보할 수 있다. 그리고 해당 과제를 진행하면서 만들어진 시사점(Lesson Learned)를 포함한 결과물을 풀(Pool)에 잘 축적하고 관리함으로써 향후 유사한 분석 과제 수행 시 시행착오를 최소화하고 프로젝트를 효율적으로 진행할 수 있다.

2018년 1월 8일 월요일

5. 데이터 조직 및 인력방안 수립

빅데이터의 등장에 따라 기업의 비즈니스도 많은 변화를 겪고 있다. 이러한 비즈니스 변화를 인식하고 기업의 차별된 경쟁력을 확보하는 수단으로데이터 과제 발굴, 기술 검토 및 전사 업무 적용 계획 수립 등 데이터를 효과적으로 분석.활용하기 위해 기획, 운영 및 관리를 전담할 수 있는 전문 분석 조직의 필요성이 제기되고있다.

현재 데이터와 관련된 기술적인 문제들은 어느 정도 발전되었다고볼 수 있다. 하지만 많은 기업이 실제 분석 전문가나 적절한 조직체계를 갖추고있지 않아 데이터 분석 및 활요 시 어려움에 봉착하는 경우가 많다. 특히 데이터에 대한 관심과 시각이 넓어지면서 분석 관점에서 컨트롤 타워의 필요성도 제기되고 있다. 이로인해 최근 국내 기업들에서도전담 조직으로서 '데이터 과학자(Data Scientist)'조직이 구성되고 있으며 조직의 장으로 C레벨 임원을 두는 것을 검토하는 기업도생겨나기 시작했다.

그림은 이러한 분석 조직의 목표와 역할, 조직 구성을 설명하고있다. 데이터 분석 조직은 기업의 경쟁력 확보를 위해 데이터 분석의 가치를 발견하고, 이를 활용하여 비즈니스를 최적화하는 목표를 갖고 구성되어야 한다. 이를 위해 기업의 업무 전반에 걸쳐 다양한 분석 과제를 발굴해 정의하고, 데이터 분석을 통해 의미 있는 인사이트를 찾아 실행하는 역할 을 수행할 수 있어야 한다. 다양한 분야의 지식과 경험을 가진 인력과 업무 담당자 등으로 구성된 전사 또는 부서 내 조직으로 구성할 수 있다.

분석 전문조직은 표와 같이 조직구조 및 인력 구성을 고려해 기업에 최적화 된 형태로 구성해야 한다.

데이터 분석을 위한 조직 구조는 다양한 형태로 살펴볼 수 있는데, 특히 분석업무 수행 주체에 따라 그림과 같이 3가지 유형의 조직구조로 살펴볼 수 있다.

첫 번째, '집중형 조직 구조'는 조직 내에 별도의 독립적인 분석 전담조직을 구성하고, 회사의 모든 분석업무를 전담 조직에서 담당한다. 분석 전담조직 내부에서 전사 분석 과제의 전략적인 중요도에 따라 우선순위를 정하여 추진할 수 있다. 한편 일부 현업 부서와 분석 업무가 중복 또는 이원화될 가능성이 있다.

두 번째, '기능 중심의 조직 구조'는 일반적으로 분석을 수행하는 형태이며, 별도로 분석 조직을 구성하지 않고 각 해당 업무부서에서 직접 분석하는 형태다. 이러한 특징으로 인해 전사적 관점에서 핵심 분석이 어려우며, 특정 업무 부서에 국한된 분석을 수행할 가능성이 높거나 일부 중복된 분석 업무를 수행할 수 있는 구조다.

세 번째, '분산된 조직구조'는 분석 조직의 인력들을 현업부서에 배치해 분석 업무를 수행하는 형태다. 전사 차원에서 분석 과제의 우선순위를 선정해 수행이 가능하며, 분석 결과를 신속하게 실무에 적용 할 수 있는 장점이 있다.

이렇듯 데이터 분석을 위한 다양한 형태의 분석 조직을 구성하여 운영할 수 있지만, 어떠한 조직구조가 적합한 형태라고 단정 지을 수 없다. 따라서 각 기업이 처한 환경과 특성을 고려하여 적절한 분석 조직을 구성해야 한다.

분석조직이 낮추어져 있다 하더라도 조직 구성원의 분석 역량이 하루아침에 성장하는 것도 아니고, 한 사람이 데이터 분석과 관련된 모든 역량을 다 갖추기는 현실적으로 어렵다. 따라서 전문 역량을 갖춘 각 분야의 인재들을 모아 조직을 구성하는 것이 바람직하다. 분석 조직을 효과적으로 구성하여 운영하기 위해서는 그름과 같이 비즈니스 이해를 위한 인력, 분석에 필요한 IT 기술을 이해하는 인력, 통계를 이용한 다양한 분석기법을 활용할 수 있는 분석 전문 인력, 조직 내 분석 문화 확산을 위한 변화 관리 인력, 분석 조직뿐 아니라 관련 부서 조직원의 분석 역량 향상을 위한 교육담당 인력 등을 다양하게 구성함으로써 분석 조직의 경쟁력을 극대화할 수 있다.


4. 데이터 거버넌스 체계 수립

빅데이터는 데이터의 크기(Volume)로 그 의미의 절대성을 갖는 것은 아니다. 그러나 실시간으로 쏟아지는 엄청난 양의 데이터와 정형화된 데이터를 넘어 비정형.반정형의 데이터는 조직이나 프로젝트 단위의 데이터 관리체계로는 그 해답을 찾을 수 없고 전사 차원의 체계적인 데이터 거버넌스(Data Governace)의 필요성을 부각시키고 있다.

그러나 아직 많은 기업에서 전사 차원의 데이터 관리체계를 갖추지 못하고 시스템별로 데이터를 관리함으로써 데이터 중복 및 비표준에 따른 정합성 오류와 데이터 활용 저하의 문제점을 갖고 있다. 따라서 빅데이터 프로젝트를 효과적으로 추진하거나 지속적인 효과를 얻기 위해서는 데이터 거버넌스 체계 수립이 중요하며 거버넌스가 없는 빅데이터의 적용은 단발성 효과에 그칠 수 있다.

데이터 거버넌스란 전사 차원의 모든 데이터에 대하여 정책 및 지침, 표준화, 운영조직 및 책임 등의 표준화된 관리 체계를 수립하고 운영을 위한 프레임워크(Framework)및 저장소(Repository)를 구축하는 것을 말한다. 특히 마스터 데이터(Master Data), 메타 데이터(Meta Data), 데이터 사전(Data Dictionary)은 데이터 거버넌스의 중요한 관리 대상이다.

기업은 데이터 거버넌스 체계를 구축함으로써 데이터의 가용성, 유용성, 통합성, 보안성, 안전성을 확보할 수 있으며 이는 빅데이터 프로젝트를 성공으로 이끄는 기반이 된다. 데이터 거버넌스는 독자적으로 수행될 수도 있지만 전사 차원의 IT 거버넌스나 EA(Enterprise Architecture)의 구성요소로써 구추고디는 경우도있다.

빅데이터 거버넌스는이러한 데이터거버넌스의 체계에 더하여 빅데이터의 효율적인 관리, 다양한 데이터의관리체계, 데이터 최적화, 정보보호, 데이터 생명주기 관리, 데이터 카테고리별 관리 책임자(Data Steward)지정 등을 포함한다.

데이터 거버넌스의 구성요소인 원칙(Principle), 조직(Organization), 프로세스(Process)는 유기적인 조합을 통하여 데이터를 비즈니스 목적에 부합하고 최적의정보 서비스를 제공할 수 있도록 효과적으로 관리한다.

-원칙
데이터를 유지 관리하기 위한 지침과 가이드
보안, 품질기준, 변경관리

-조직
데이터를 관리할 조직의 역할과 책임
데이터 관리자, 데이터베이스 관리자, 데이터 아키텍트(Data Architect)

-프로세스
데이터 관리를 위한 활동과 체계
작업 절차, 모니터링 활동, 측정 활동

가. 데이터 표준화
데이터 표준화는 데이터 표준 용어 설정, 명명 규칙(Name Rule)수립, 메타 데이터(Meta Data) 구축, 데이터 사전(Data Dictionary)구축 등의 업무로 구성된다. 데이터 표준 용어는 표준 단어 사전, 표준 도메인 사전, 표준 코드 등으로 구성되며 사전 간 상호 검증이 가능하도록 점검 프로세스를 포함해야 한다.
명명 규칙은 필요시 언어별(한글, 영어 등 외국어)로 작성되어 매핑 상태를 유지해야 한다. 메타 데이터와 데이터 사전은 데이터의 데이터 구조 체계를 형성하는 것으로써 데이터 활용을 원활하게 하기 위한 데이터 구조 체계(Data Structure Architecture)나 메타 엔티티 관계 다이어그램(Meta Entity Relationship Diagram)을 제공한다.

나. 데이터 관리 체계
데이터 정합성 및 활용의 효율성을 위하여 표준 데이터를 포함한 메타 데이터(Meta Data)와 데이터 사전(Data Dictionary)의 관리 원칙을 수립한다. 수립된 원칙에 근거하여 항목별 상세한 프로세스를 만들고 관리와 운영을 위한 담당자 및 조직별 역할과 책임을 상세하게 준비한다.
빅데이터의 경우 데이터 양의 급증으로데이터의 생명 주기 관리방안(Data Life Cycle Management)을 수립하지 않으면 데이터 가용성 및 관리비용 증대 문제에 직면하게 될 수도 있다.

다. 데이터 저장소관리(Repository)
메타데이터 및 표준 데이터를 관리하기 위한 전사 차원의 저장소를 구성한다. 저장소는 데이터 관리 체계 지원을 위한 워크플로우(Workflow)및 관리용 응용소프트웨어(Application)을 지원하고관리 대상 시스템과의 인터페이스를 통한 통제가 이루어져야 한다. 또한 데이터 구조 변경에 따른 사전 영향 평가도 수행되어야 효율적인 활용이 가능하다.

라. 표준화 활동
데이터 거버넌스 체계를 구축한 후 표준 준수 여부를 주기적으로점검하고 모니터링을 실시한다. 또한 거버넌스의 조직 내 안정적 정착을 위한 계속적인 변화관리 및 주기적인 교육을 진행한다. 지속적인 데이터 표주노하 개선 활동을 통하여 실용성을 높여야 한다.

3. 분석 지원 인프라 방안 수립

분석 과제 단위별로 별도의 부석 시스템을 구축하는 경우, 관리의 복잡도 및 비용의 증대라는 부작용이 나타나게 된다. 따라서 분석 마스터 플랜을 기획하는 단계에서붜 장기적으로 안정적으로활용할 수 있는 확장성을 고려한 플랫폼 구조를 도입하는 것이 적절하다.

플랫폼이란 단순한 분석 응용프로그램뿐만 아니라 분석 서비스를 위한 응용프로그램이 실행될 수 있는 기초를 이루는 컴퓨터 시스템을 의미하며 일반적으로 하드웨어에 탑재되어 테이터 분석에 필요한 프로그래밍환경에 실행 및 서비스 환경을 제공하는 역할을 수행한다. 이러한 분석 플랫폼이 구성되어 있는 경우에는 새로운 데이터 분석 니즈가 존재할 경우 개별적인 분석 시스템을 추가하는 방식이 아닌 서비스를 추가적으로 제공하는 방식으로 확장성을 높일 수 있다.

2. 데이터 분석 성숙도 모델 및 수준진단

이미 많은 기업에서 빅데이터는 화두가 되고 있으며 데이터를 어떻게 분석.활용하느냐가 기업의 경쟁력을 좌우하는 궁극적 요소로 인식되고 있다. 이러한 관점에서 기업들은 데이터 분석의 도입 여부와 활용에 대한 명확한 분석 수준을 점검할 필요가 있다. 데이터 분석의 수준 진단을 통해 데이터 분석 기반을 구현하기 위해 무엇을 준비하고 보완해야 하는지 등 분석의 유형 및 분석의 방향성을 결정할 수 있다.

데이터 분석 수준 진단은 그림의 프레임워크와 같이 6개 영역에서의 분석 준비도와 3개 영역에서의 분석 성숙돌르 함께 평가함으로서 수행될 수 있다.

분석을 위한 준비도 및 성숙도를 진단하는 궁극적인 목표는 각 기업이 수행하는 현재의 분석 수준을 명확히 이해하고, 수준진단 결과를 토대로 미래의 목표수준을 정의하는 데 있다.

수준진단을 통해 데이터 부석을 위한 기반 또는 환경이 유사업종 또는 타 경쟁사에 비해 어느 정도 수준이고 데이터를 활요한 분석의 경쟁력 확보를 위해 어떠한 영역에 선택과 집중을 해야 하는지, 어떤 관점을 보안해야하는지 등 개선 방안을 도출할 수 있다.

가. 분석 준비도
분석 준비도(Readiness)는 기업의 데이터 분석 도입의 수준을 파악하기 위한 진단 방법으로서 그림과 같이 분석업무, 인력 및 조직, 분석 기법, 분석 데이터, 분석 문화, IT 인프라 등 총 6가지 영역을 대상으로 현 수준을 파악한다. 진단 영역별로 세부 항목에 대한 수준을 파악하고, 진단 결과 전체 요건 중 일정 수준 이상 충족하면 분석 업무를 도입하고, 충족하지 못하면 먼저 분석 환경을 조성한다.

그림의 예시에서 보는 바와 같이 금융업종을 대상으로 6개 영역에 대한 분석 준비도를 진단해본 결과, 보험업종의 분석 준비도가 상대적으로 높게 나타난 반면 증권업종의 분석 준비도는 타 금융업종에 비해 상대적으로 탖다. 이를 간략히 요약해 보면, 은행 및 보험업종은 분석업무를 착수하여 일정부분 성과를 기대할 수 있을 것으로 판단되며, 증권업종은 내부적인 분석환경을 조성하는 것이 우선되어야 한다고 볼 수 있다.

또한 진단 영역별로 살펴보면, 금융업 전반으로 인력.조직.분석 기법 등에 대한 준비도가 낮게 인식되고 있다. 이에 따라 분석 업무 수행을 위한 전문 인력 확보, 분석 역량 향상을 위한 교육 확대 및 변화관리가 필요하다고 볼 수 있다.

이렇듯 기업마다 분석 수행을 위한 현 수준은 어떠한지, 보다 효율적인 분석업무 수행을 위해 요구 또는 개선이 필요한 부분은 어디인지 데이터 분석 준비도를 진단해 보고 명확한 방향을 수립할 필요가 있다.

금융업종 전체의 분석 준비도 수준과 해당 기업의 분석 준비도 수준을 비교하여 상대적으로 수준이 낮은 영역을 파악해 볼 수 있다. 그림의 예시는 인력 및 조직, 분석 기법 등 조직의 분석 역량은 미흡한 수준인 반면, 조직의 분석 문화는 상대적으로 높은 수준임을 보여준다.

분석 준비 수준에 대한 6개 진단 영역별로 자세히 살펴보면, 분석 업무 준비도는 그림과 같이 4개 항목을 기준으로 진단을 수행한다. 전체 금융업종 평균과 비교해 볼 때, 분석업무에 대한 요건은 파악하고 있으나 분석업무에 대한 정기적인 개선은 미흡한 수준이다.

인력 및 조직 관점의 분석 준비도는 4개 항목 모두 매우 미흡한 수준으로 나타났다. 이는 향후 분석을 위한 전사 차원의 전문 분석 조직구성이 필요하며, 특히 관리자들의 기본적 분석 역량을 강화하기 위한 다양한 교육 프로그램 운영이 필요하다는 의미이다.

분석 기법 영역의 준비도수준은 3개 항목을 토대로 파악하였다. 분석 기법을 개선하거나 분석기법 라이브러리 관리체계는 매우 미흡한 수준이지만, 분석 업무별로 특화된 분석 기법은 일부 사용하고 있는 것을 알수 있다.

분석 데이터 준비도는 6개 항목을 기준으로 파악한다. 분석을 위한 데이터는 충분한 수준이며, 데이터 품질은 비교적 양호한 수준임을 알 수 있다. 하지만 다양한 외부 데이터의 활요 및 비구조 데이터 관리에 대한 준비는 상대적으로 미흡한 수준임을 알 수 있다.

분석 문화에 대한 준비도는 3개 항목을 중심으로 현 수준을 진단한다. 전반적으로 다른 진단 영역에 비해 분석 문화에 대한 준비도는 양호한 편임을 알 수 있다.

분석 인프라에 대한 준비도는 8개 항목을 대상으로 현재 분석 수준을 진단한다. 대규모 데이터 처리환경 및 분석을 위한 하드웨어, 데이터 품질 등은 양호한 수준임을 알 수 있다. 반면 데이터 및 고차원 분석 환경은 상대적으로 미흡한 수준이므로 이 부분에 대한 환경 개선 및 보완이 필요하다.

나. 분석 성숙도 모델
소프트웨어공학에서는 시스템 개발 업무능력과 조직의 성숙도(Maturity)를 파악하기 위해 CMMI(Capability Maturity Model Integration) 모델을 기반으로 조직의 성숙도를 평가한다. 또한 업무 프로세스 자체의 성숙도와 이러한 업무 프로세스 관리와 개선을 위한 조직의 역량을 CMMI에 기반한 업무 프로세스 성숙도 모형으로평가한다. 이와 같은 맥락에서 빅데이터 시대에는 분석 능력 및 분석 결과 활용에 대한 조직의 성숙도 수준을 평가해 현재 상태를 점검해 볼 필요가 있다.

기업에서 분석 수준은 성숙 단계에 다라 점차 진화하며 산업 및 기업의 특성에 따라 각 성숙 단계의 내용은 약간 상이할 수 있다. 분석 성숙도 진단은 비즈니스 부분, 조직.역량 부문, IT부문 등 3개 부분을 대상으로 성숙도 수준에 따라 도입단계, 활용단계, 확산단계, 최적화단계로 구분해 살펴볼 수 있다.

그림과 같이 금융업종의 분석 성숙도 수준 진단 결과, 금융업은 전체적으로 도입 단계를 넘어 활용 단계로 진입했음을 알 수 있다. 업종별로는 카드 및 보험업종에 비해 증권업종이 상대적으로 낮은 성숙도를 보이고 있으며, 비즈니스보다 IT 부문에 대한 성숙도 수준이 낮은 것을 알 수 있다.

그림은 A 기업의 분석 성숙돌르 측정한 결과다. 전반적으로 분석의 성숙도가 낮은 수준으로도입 단계에 다소 못 미치는 상황이며, 부문별로는  조직 및 역량 부문의 성숙도에 비해 분석 업무에 대한 IT지원이 미흡해 비즈니스 부문의 성숙도도 낮게 나타나고있다.

그림에서 보는 바와 같이 비즈니스 부분에 대한 성숙도 진단 결과를 살펴보면, 실적 및 통계 업무 중심으로 분석을 활요하고 있으며, 데이터를 정기적으로추출하여분석업무에 활용하고 있음을 알 수 있다. 반면 분석 업무의 자동 실행 및 분석 패턴 관리 등은 상대적으로 활용도가 떨어진다.

그림은 조직 및 역량 부분에 대한 성숙도 진단 결과다. 조직 내 일부 담당자의 지식과 경험에 의존해 분석하고 있으며, 일부 관리자들의 기본적인 데이터 분석이 가능함을 알 수 ㅣㅇㅆ다. 반면 분석 조직의 확보 및 운영, 분석 직무 운영은 상대적으로 미흡한 수준임을 고려할 때, 분석 조직의 구성방안을 고민해볼 필요가 있다.

IT 인프라 부문에 대한 성숙도는 그림 과 같이 분석을 위한 데이터 웨어하우스, 데이터 마트, OLAP 환경 등 전통적인 분석체계는 갖추어진 것으로 보인다. 하지만 고급분석(Advanced Ananlytics)등을 위한 환경은 매우 미흡한 수준임을 알 수 있다. 따라서 보다 효과적인 분석을 위해 고급분석 환경 구현을 위한 추가 개선활동이 요구된다.

다. 분석 수준 진단 결과
해당 기업의 분석 준비도와 성숙도 진달 결과를 토대로 그림 과 같이 기업의 현재 분석 수준을 객관적으로 파악 할 수 있다. 이를 토대로 유곤 업종 또는 경쟁사의 분석 수준과 비교하여 분석 경쟁력 확보 및 강화를 위한 목표 수준을 설정할 수 있다.

그림와 같이 분석 관점에서 4가지 유형으로 분석 수준진단 결과를 구분하여 향후 고려해야 하는 데이터 분석 수준에 대한 목표 바향을 정의하고, 유형별 특성에 따라 개선방안을 수립한다.
첫째, '준비형'은 데이터 분석을 위한 낮은 준비도와 낮은 성숙도 수준에 있는 기업들이다. 해당 위치의 기업들은 분석을 위한 데이터, 조직 및 인력, 분석 업무, 분석 기법 등이 적용되지 않음으로 인해 사전 준비가 필요한 유형이라고 할 수 있다.
둘째, '정착형'은 준비도는 낮은 편이지만 조직, 인력, 분석업무, 분석 기법 등을 기업 내부에서 제한적으로 사용하고 있다. 우선적으로 분석의 정착이 필요한 기업이 이 유형에 속한다.
셋째, '도입형'은 기업에서 활요하는 분석업무 및 분석기법 등은 부족한 상태지만, 조직 및 인력 등 준비도가 높은 유형으로 바로 데이터 분석을 바로 도입할 수 있는 기업이 여기에 속한다.
넷째, '확산형'은 데이터 분석을 위해 기업에 필요한 6가지 분석 구성요소를 모두 갖추고 있으며, 현재 부분적으로 도입해 지속적인 확산이 가능한 기업이 이 유형에 속한다.

1. 거버넌스 체계 개요

기업에서 데이터를 이용한 의사결정이 강조될수록 데이터 분석과 활용을 위한 체계적인 관리가 중요해진다. 이는 단순히 대용량 데이터를 수집.축적하는 것보다는 어떤 목적으로 어떤 데이터를 어떻게 분석에 활용할 것인가가 더욱 중요하기 때문이다. 그리고 조직 내 분석 관리체계를 수립해야 하는 이유는 데이터 분석을 기업의 문화로 정착하고 데이터 분석 업무를 지속적으로 고도화하기 위해서이다.

마스터 플랜 수립 시점에서 데이터 분석의지속적인 적용과 확산을 위한 거버넌스 체계는 분석 기획 및 관리를 수행하는 조직(Organiztion), 과제 기획 및 운영 프로세스(Process), 분석 관련 시스템(System), 데이터(Data), 분석 관련 교육 및 마인드 육성 체계(Human Resource)로 구성된다.


3. 이행계획 수립

가. 로드맵 수립
분석 과제에 대한 포트폴리오 사분면(Quadrant)분석을 통해 결정된 과제의 우선순위를 토대로 분석 과제별 적용범위 및 방식을 고려하여 최종적인 실행 우선순위를 결정한 후 단계적 구현 로드맵을 수립한다. 단계별로 추진하고자 하는 목표를 명확히 정의하고 추진 과제별 선.후행 관계를 고려하여 단계별 추진 내용을 정렬한다.

나. 세부 이행계획 수립
데이터 분석 체계는 고적적인 폭포수(Waterfall) 방식도 있으나 반복적인 정련과정을 통하여 프로젝트의 완성도를 높이는 방식을 주로 사용한다.

이러한 반복적인 분석 체계는 모든 단계를 반복하기 보다 데이터 수집 및 확보와 분석 데이터를 준비하는 단계를 순차적으로 진행하고 모델링 단계는 반복적으로 수행하는 혼합형을 많이 적용하며, 이러한 특성을 고려하여 세부적인 일정계획도 수립해야 한다.


2. 수행 과제 도출 및 우선순위 평가

우선순위 평가는 정의된 데이터 과제에 대한 실행 순서를 정하는 것으로 업무 영역별로 도축된 분석 과제를 우선순위 평가기준에 따라 평가하고 과제 수행의 선.후행 관계를 고려하여 적용 순위를 조정해 최종 확정한다.

ISP와 같은 일반적인 IT 프로젝트는 과제의 우선순위 평가를 위해 전략적 중요도, 실행 용이성 등 기업에서 고려하는 중요 가치 기준에 따라 다양한 관점에서의 우선순위 기준을 수립하여 평가한다.

그러나 데이터 분석 과제의 우선순위 평가기준은 그 기업이 당면한 사항에 따라 다르고 기존의 IT 프로젝트에서의 우선순위 평가 기준과도 다른 관점에서 살펴볼 필요가 있다.

흔히 빅데이터의 핵심적인 특증을 데이터 크기(Volume), 다양한 데이터 형태(Variety), 데이터의 빠른 생성속도(Velocity)의 3V로 설명할 수 있다. 빅데이터의대부분의 비정형 데이터로 구성되어 있으며 이러한 비정형 데이터와 기존의 정형 데이터가 결합(Mesh-up)되어 분석됨으로써 새로운 가치(Value)가 창출된다는 점에서 빅데이터를 4V로 정의하기도 한다.

빅데이터의 4V를 ROI 관점으로 살펴보면 크기(Volumne), 다양성(Variety), 속도(Velocity)등 3V는 투자 비용(Investment)측면의 요소라고 볼 수 있다. 크기는 데이터의 규모 및 양을 의미하는데, 이런 대용량 데이터를 저장,처리하고 관리하기 위해서는 새로운 투자가 따라야 한다. 다양성은 데이터의 유형에 따라 정형.반정형.비정형 데이터, 소스에 따라 내부.외부.소셜 데이터 등으로 구분하는 등 다양한 종류와 형태를 갖는다. 이러한 데이터를 입수하 데 있어서도 투자가 필요하다.

마지막으로 속도는 데이터 생성 속도 또는 데이터 처리 속도를 의미하는데, 이를 위해 데이터를 빠르게 가공.분석하는 기술이 요구된다. 속도에 대한 고려는 현 시스템에 미치는 부하 여부에 따라 기존 아키텍처에 영향을 미치게 될 것이고, 궁극적으로 업무상 변경되거나 새롭게 추가되어 아키텍처의  변형을 일으키고 결과적으로 투자비용을 발생시키는 요소가 된다.

반면 가치는 분석 결과를 활용하거나 실질적인 실행을 통해 얻게 되는 비즈니스 효과(Return)측면의 요소라고 볼 수 있다. 이는 기업의 데이터 분석을 통해 추구하거나 달성하고자 하는 목표 가치라고 정의할 수 있다.

ROI 요소를 고려하여 데이터 분석 과제에 대한 우선쉰위 평가 기준을 정의할 수 있다. 데이터 분석 과제를 추진할 때 우선 고려해야 하는 요소는 전략적 중요도에 따른 시급성이 가장 중요한 기준이다. 데이터를 생성, 저장,가공, 분석하는 비용과 현재 기업의 분석 수준을 고려한 난이도 역시 적용 우선순위를 선정하는데 있어 중요한 기준이 될 수 있다.

시급성의 판단 기준은 전략적 중요도가 핵심이며, 이는 현재의 관점에 전략적 가치를 둘 것인지 미래의 중.장기적 관점에 전략전인 가치를 둘 것인지에 적정 시기를 고려하여 시급성 여부를 판단할 수 있다.

난이도는 현 시점에서 과제를 추진하는 것이 비용 측면과 범위 측면에서 바로 적용하기 쉬운(Easy) 것인지 또는 어려운(Difficult) 것인지에 대한 판단 기준이다.

다시 정리하면 과제의 범위를 시범 과제(Pilot 또는 PoC) 형태로 일부 수해할 것인지, 아니면 처음부터 크게 수행할 것인지, 또 데이터 소스는 기업 내부의 데이터부터 우선 활용하고 외부 데이터까지 확대해 나갈 것인지에 대한 난이도를 고려해 볼 수 있다.

난이도는 해당 기업의 현 상황에 따라 조율할 수 있다. 제2절 '분석거버넌스체계 수립'에서 제시하는 분석 준비도 및 성숙도 진단 결과에 따라 해당 기업의 분석 수준을 파악하고 이를 바탕으로 분석 적용 범위 및 방법에 따라 난이도를 조정할 수 있다.

그림은 포트폴리오 사분면(Quadrant) 분석을 통해 과제 우선순위를 선정하는 기법이다. 우선 순위 선정 기준을 토대로 난이도 또는 시급성을 고려하여 우선 추진해야 하는 분석 과제와 제한된 자원을 고려하여 단기적 또는 중장기적으로 추진해야 하는 분석 과제 등 4가지 유형으로 구분하여 분석 과제의 우선순위를 결정한다.

사분면 영역에서 가장 우선적인 분석 과제 적용이 필요한 영역은 3사분면(3 영역)이다. 또한 전략적 중요도가 현재 시점에는 상대적으로 낮은 편이지만 중.장기적으로는 경영에 미치는 영향도가 높고 분석 과제를 바로 적용하기 어려워 우선순위가 낮은 영역은 2사분면(2 영역)이다. 이런 측면에서 분석 과제의 적용 우선순위 기준을 '시급성'에 둔다면 3->4->2 영역 순이며 우선순위 기준을 '난이도'에 둔다면 3->1->2 영역 순으로 의사결정을 할 수 있다.

여기에서 특히 시급성이 높고 난이도가 높은 1사분면(1영역)은 경영진 또는 실무 담당자의 의사결정에 따라 적용 우선순위를 조정할 수 있다. 예를 들어, 그림 의 9번 과제와 같이 1사분면에 위치한 분석과제는 데이터 양, 데이터 특성, 분석 범위 등에 따라 난이도를 조율함으로써 적용 우선순위를 조정할 수 있다. 예를 들어 분석에 필요한 데이터 양의 수 TB 규모라면, 분석 대상이 되는 소스 데이터를 내부 데이터 관점에서 우선 분석할 수 있도록 데이터의 양을 줄여 난이도를 낮출 수 있다. 이를 통해 궁극적으로는 1사분면(1영역)에서 3사분면(3영역) 으로 분석 적용의 우선순위를 조정하여 추진할 수 있다.

또한 분석을 위한 기술적 요소에 따라서도 적용 우선순위를 조정할 수 있다. 기본적으로 대용량 데이터 분석은 데이터 저장.처리.분석을 위한 새로운 기술 요소들로 인하여 운영중인 시스템에 영향을 미친다. 이때 기존 시스템에 미치는 영향을 최소화하여 적용하거나 또는 운영중인 시스템과 별도 분리하여 시행함으로써 난이도 조율을 통해 우선순위를 조정할 수 있다. 끝으로 분석 범위에 따라서도 우선순위를 조정할 수 있다. 이 경우에는 분석 과제의 전체 범위를 한 번에 일괄적으로 적용하여 추진할 것이지, 일부 범위로 한정하여 시범과제 형태로 추진하고 평가를 통하여 분석 범위를 확대할 것인지에 대한 의사결정이 필요하다.

2018년 1월 7일 일요일

1. 분석 마스터 플랜 수립 프레임워크

중.장기적 관점의 마스터 플랜 수립을 위해서는 분석 과제를 대상으로전략적 중요도, 비즈니스 성과및 ROI, 분석 과제의 실행 용이성 등 다양한 기준을 고려해 적용할 우선쉰위를 설정할 필요가 있다. 분석 과제의 우선순위뿐 아니라 분석을 업무에 내재화할 것인지, 별도의 분석화면으로일단 적용할 것인지, 분석데이터를 내부의 데이터로 한정할 것인지, 외부의 데이터까지 포함할 것인지, 분석기술은 어느 기술요소까지 적용할 것인지 등 분석의 적용 범위 및 방식에 대해서도 종합적으로 고려하여 데이터 부석을 실행하기 위한 로드맵을 수립한다.

기업 및 공공 기관에서는 시스템의 중장기 로드맵을 정의하기 위한 정보전략계획인 ISP(Information Strategy Planning)를 수행한다. ISP는 정보기술 또는 정보시스템을 전략적으로활용하기 위하여 조직 내.외부 환경을 분석하여 기회나 문제점을 도출하고 사용자의 요구사항을 분석하여 시스템 구축 우선순위를 결정하는 등 중장기 마스터 플랜을 수립하는 절차이다. 분석 마스터 플랜은 일반적인 ISP 방법론을 활용하되 데이터 분석 기회의 특성을 고려하여 수행하고 기업에서 필요한 데이터 분석 과제를 빠짐없이 도출한 후 과제의우선순위를 결정하고 단기 및 중.장기로나누어 계획을 수립한다.



제4절 분석 프로젝트 관리 방안

과제 형태로 도출된 분석 기회는 프로젝트를 통해서 그 가치를 증명하고 목표를 달성해야 한다. 분석 프로젝트는 다른 프로젝트 유형처럼 범위, 일정, 품질, 리스크, 의사소통 등 영역별 관리가 수행되어야 할 뿐 아니라 다양한 데이터에 기반한 분석 기법을 적용하는 특성 때문에 그림 과 같이 5가지의 주요 속성을 고려하여 추가적인 관리가 필요하다.
__________________________________________________________________________________________

- Data Size
분석하고자 하는 데이터의 양을 고려한 관리 방안 수립이 필요하다. 하둡 환경에서의 엄청난 데이터량을 기반으로 분석하는 것과 기존 정형 데이터베이스에 있는 시간당 생성되는 데이터를 분석할 때의 관리 방식은 차이가 날 수 밖에 없다.

- Data Complexity
BI(Business Intelligence) 프로젝트처럼 정형 데이터가 분석 마트로 구성되어 있는 상태에서 분석을 하는것과 달리 텍스트, 오디오, 비디오 등의 비정형 데이터 및 다양한 시스템에 산재되어 있는 원천 데이터들을 총합해서 분석 프로젝트를 진행할 때는, 초기 데이터의확보화 통합 뿐 아니라 해당 데이터에 잘 적용될 수 있는 분석 모델의 선정 등에 대한 사전 고려가 필요하다.

- Speed
분석 결과가 도출되었을 때 이를 활용하는 시나리오 측면에서는 속도를 고려해야 한다. 일단위, 주단위 실적의 경우에는 배치(Batch)형태로 작업이 되어도 무방하지만, 실시간으로 사기(Fraud)를 탐지하거나 고객에게 개인화된 상품.서비스를 추천하는 경우에는 분석 모델의 적용 및 계산이 실시간으로 수행되어야 하기 때문에 프로젝트 수행 시 분석 모델의 성능 및 속도를 고려한 개발 및 테스트가 수행되어야 한다.

- Analytic Complexity
분석 모델의 정확도와 복잡도는 트레이드오프(Trade off)관계가 존재한다. 분석 모델이 복잡할수록 정확도는 올라가지만 해석이 어려워지는 단점이 존재하므로 이에 대한 기준점을 사전에 정의해 두어야 한다. 고객의신용을 평가하는 마케팅 시나리오에서 분석모델을 활용하여 신용 점수가 낮게 나올 때 어떠한 변수에 기인했는지를 모델에서 설명해 줄 수 없으면 영업.마케팅 직원 입장에서는 해당 고객과의 소통이 어려워지는 단점이 존재하므로, 해석이 가능하면서도 정확도를 올릴수 있는 최적모델을 찾는 방안을 사전에 모색해야한다.

- Accuracy & Precision
Accuracy는 모델과 실제 값 사이의차이가 적다는 정확도를 의미하고 Precision은 모델을 지속적으로 반복했을 때의 편차의수준으로써 일관적으로 동일한 결과를 제시한다는 것을 의미한다. 분석의활용적인 측면에서는 Accuracy가 중요하며, 안정성 측면에서는 Precision이 중요하다. 그러나 Accuracy와 Precision은 트레이드오프가 되는 경우가 많기 때문에 모델의해석 및 적용 시 사전에 고려해야 한다.

1. 분석 프로젝트의 특성
분석가의 목표는 분석의 정확도를 높이는 것이지만 프로젝트의 관점에서는 도출된 분석 과제를 잘 구현하여원하는 결과를 얻고 사용자가 원활하게 활용할 수 있도록 전체적인 과정을 고려해야 하기 때문에 개별적인 분석 업무 수행뿐만 아니라 전반적인 프로젝트 관리 또한 중요한 일이다.

분석가의 입장에서 본다면, 데이터의 원천을 다루는 데이터 영역과 결과를 활요할 비즈니스 영역의 중간에서 분석 모델을 통한 조율을 수행하는 조정자의 역활이 핵심이 될 것이다. 특히 분석 프로젝트에서는 데이터 영역과비즈니스 영역의 현황을 이해하고 프로젝트의목표인 분석의 정화도 달성과 결과에 대한 가치 이해를 전달하는 조정자로써의 분석가의 역할이 중요하다. 조정자로서의 분석가가 해당 프로젝트의 관리자까지 겸임하게 되는 경우가 대부분이므로 프로젝트 관리 방안에 대한 이해와 주요 관리 포인트를 사전에 숙지하는 것이 필수적이다.

또한 분석 프로젝트는 도출된 결과의 재해석을 통한 지속적인 반복 및 정교화가 수행되는 경우가 대부분이므로 프로토타이핑 방식의 어자일(Agile)프로젝트 관리방식에 대한 고려도 필요하다. 데이터 분석의 지속적인 반복 및 개선을 통하여 의도 했던 결과에 더욱 가까워지는 형태로 프로젝트가 진행될 수 있도록 적절한 관리 방안 수립이 사전에 필요하다.

앞서 살펴본 것처럼, 분석 프로젝트는데이터 영역과 비즈니스 영역에 대한 이해뿐만 아니라 지속적인 반복이 요구되는 분석 프로세스의 특성을 이해한 프로젝트 관리 방안을 수립하는 것이 중요하다. 분석 과제정의서를 기반으로 프로젝트를 시작하되 지속적인 개선 및 변경을 염두에 두고 기간 내에 가능한 최선의 결과를 도출할 수 있도록 프로젝트 구성원들과 협업하는 것이 분석 프로젝트의 특징이다.

2. 분석 프로젝트 관리방안
분석 프로젝트는 데이터 분석의 특성을 살려 프로젝트관리 지침(Guidence on Project Management, KS A ISO 21500:2013)을 기본 가이드로 활용할 필요가 있다. 프로젝트관리 지침의프로젝트 관리 체계는 통합(Integration), 이해관계자(Stakeholder), 범위(Scope), 자원(Resource), 시간(Time), 원가(Cost), 리스크(Risk), 품질(Quality), 조달(Procurement),의사소통(Communication)의 10개의주제 그룹으로 구성되어 있다.

주제그룹                       개념 및 관련 프로세스
통합                   프로젝트와 관련된 다양한 활동과 프로세스를 도출, 정의, 결합,단일화, 조정, 통제, 종료                          에 필요한 프로세스
이해관계자       프로젝트 스폰서, 고객사, 기타 이해관계자를 식별하고 관리하는데 필요한 프로세스
범위                 작업과 인도물을 식별하고 정의하는데 요구되는 프로세스
자원                 인력, 시설, 장비, 자재, 기반 시설, 도구와 같은 적절한 프로젝트 자원을 식별하고 확보
                       하는데 필요한 프로세스
시간                 프로젝트 활동의 일정을 수립하고 일정 통제의 진척상황을 관찰하는데 요구되는 프로세스
원가                예산 개발과 원가통제의 진척상황을 관찰하는데 요구되는 프로세스를 포함
리스크             위험과 기회를 식별하고 관리하는 프로세스
품질                품질보증과 품질통제를 계획하고확립하는데 요구되는 프로세스
조달               계획에 요구된 프로세스를 포함하며 제품 및 서비스 또는 인도물을 인수하고 공급자와의
                      관계를 관리하는데 요구되는 프로세스
의사소통        프로젝트와 관련된 정보를 계획, 관리, 배포하는데 요구되는 프로세스


특히 분석 프로젝트의경우에는 각각의 관리영역에서 일반 프로젝트와 다르게 좀 더 유의해야 할 요소가 존재한다. 각 영역에서 분석 프로젝트가 가지게 되는 특성과 고려해야 할 주요 관리 항목은 [표 3-1-3] 와 같다.

분석가가 분석 프로젝트에서 프로젝트 관리자의 역할을 수행하는 경우가 대부분이기 때문에 프로젝트 관리 영역에 대한 주요한 사항들은 체크포인트 형태로 관리해서 발생할 수 있는 이슈와 리스크를 숙지하고미연에 방지할 필요가 있다.

[표 3-1-3] 분석 프로젝트 영역별 주요 관리 항목
관리 영역                   분석 프로젝트의특성 및 주요 관리 항목
범위                     - 분석 기획단계의 프로젝트 범위가 분석을 진행하면서 데이터의 형태와 양 또는 적용    (Scope)                되는 모델의 알고리즘에 따라 범위가 빈번하게 변경됨
                           - 분석의 최종 결과물이 분석 보고서 형태인지 시스템인지에 따라서 투입되는 자원 및                                범위가 크게 변경되므로 사전에 충분한 고려가 필요함
시간(Time)         - 데이터 분석 프로젝트는 초기에 의도했던 결과(모델)가 나오기 쉽지 않기 때문에
                           지속적으로 반복되어 많은 시간이 소요될 수 있음
                          - 분석 결과에 대한 품질이 보장된다는 전제로 Time Boxing 기법으로일정 관리를
                           진행하는 것이 필요함
원가(Cost)         - 외부 데이터를 활요한 데이터 분석인 경우 고가의비용이 소요될 수 있으므로 사전에
                           충분한 조사가 필요함
                          - 오픈소스 도구(Tool) 외에 프로젝트 수행 시 의도했던 결과를 달성하기 위하여 상용
                           버전의도구(Tool)가 필요할 수 있음(예: 가시화를 위한 BI 솔루션, 지리정보 표기를
                           위한 GIS 솔루션 등)
품질(Quality)     -분석 프로젝트를 수행한 결과에 대한 품질목표를 사전에 수립하여 확정해야 함
                         - 프로젝트 품질은 품질통제(Quality Control)와 품질보증(Quality Assurance)으로                                   나누어 수행되어야 함
통합                   - 프로젝트관리 프로세스들이 통합적으로 운영될 수 있도록 관리함
(Integration)
조달                    - 프로젝트 목적성에 맞는 외부 소싱을 적절하게 운영할 필요가 있음
(Procurement)   -PoC(Proof of Concept)형태의 프로젝트는 인프라 구매가 아닌 클라우드 등의 다양한
                           방안을 검토할 필요가 있음
자원                   - 고급 분석 및 빅데이터 아키텍쳐링을 수행할 수 있는 인력의 공급이 부족하므로
(Resource)         프로텍트 수행 전 전문가 확보 검토 필요
리스크                -분석에 필요한 데이터 미확보로 분석 프로젝트 진행이 어려울 수 있어 관련 위험을
(Risk)                  식별하고 대응방안을 사전에 수립해야 함
                          - 데이터 및 분석 알고리즘의 한계로 품질목표를 달성하기 어려울 수 있어 대응 방안을                               수립할 필요가 있음
의사소통              -전문성이 요구되느 데이터 분석의 결과를 모든 프로젝트 이해관계자(Stakeholders)가
(Communication) 공유할 수 있도록 해야 함
                          - 프로젝트의원할한 진행을 위한 다양한 의사소통체계 마련 필요
이해관계자        - 데이터 분석 프로젝트는 데이터 전문가, 비즈니스 전문가, 분석 전문가, 시스템 전문가
(Stakeholder)    등 다양한 전문가가 참여하므로 이해관계자의 식별과 관리가 필요함.


제3절 분석 과제 발굴

분석 과제는 풀어야 할 다양한 문제를 데이터 분석 문제로 변환한 후 이해관계자들이 이해하고 프로젝트로 수행할 수 있는 과제정의서 형태로 도출된다. 분석 과제를 도출하기 위한 방식은 크게 2가지로 나누어진다.

- 하향식 접근 방식(Top Down Approach)
문제가 주어지고 이에 대한 해법을 찾기 위하여 각 과정이 체계적으로 단계화되어 수행하는 방식

- 상향식 접근 방식(Bottom Up Approach)
문제의 정의 자체가 어려운 경우 데이터를 기반으로 문제의 재정의 및 해결 방안을 탐새갛고 이를 지속적으로 개선하는 방식

문제가 주어져 잇는 상태에서 답을 구하는 하향식 접근 방식이 전통적으로 수행되었던 분석 과제 발굴 방식이다. 그러나 대규모의 다양한 데이터를 생성하고 빠르게 변하는 기업환경에서는 문제 자체의 변화가 심해 정확하게 문제를 사전에 정의하는 것이 어려워지고 있다. 이에 따라 단순히 주어진 문제를 잘 푸는 것뿐만 아니라 데이터를 활용하여 생각하지 못했던 인사이트(Insight)를 도출하고 시행착오를 통해서 개선해가는 상향식 접근 방식의 유용성이 점차 증가하고 있는 추세이다.

__________________________________________________________________

그림에 나와 있는 디자인 사고(Deging Thinking)프로세스의 예처럼 새로운 상품을 개발하거나 전략 수립 등 중요한 의사결정을 할 때 가능한 오션을 도축하는 상향식 접근 방식(Bottom Up Approach)의 발산(Diverge)단계와 도출된 옵션을 분석하고 검증하는 하향식 접근 방식(Top Down Approach)의 수렵(Converge)단계를 반복적으로 수행하는 식으로 상호 본완하는 것이 동적인 환경에서 분석의 가치를 높일수 있는 최적의 의사결정 방식이 된다.

분석 과제 발굴을 두가지 접근 방식으로 나누었지만 실제 분석 과정에서는 혼용되어 활용되는 경우가 많다. 그런 경우 능동적으로 대처하기 위해서 각 접근 방식의 특징을 잘 이해하고 적절한 절차 및 관리 방안의 활용이 필요하다.

1. 하향식 접근법(Top Down Approach)
하향식 분석 접근법은 현황 분석을 통해서 또는 인식된 문제점 혹은 전략으로부터 기회나 문제를 탐색(Probleam Discovery)하고 해당 문제를 데이터 문제로 정의(Problem Definition)한 후 해결방안 탐색(Solution Search), 그리고 데이터 분석의 타당성 평가(Feasibility Study)를 거쳐 분석 과제를 도출하는 과정으로 이루어져 진다.

가. 문제 탑색(Problem Discovery) 단계
개별적으로 인지하고 있는 문제를 단순히 정리하는 것보다 전체적인 관점의 기준 모델을 활용하여 빠짐없이 문제를 도출하고 식별하는 것이 중요하다. 전체적인 관점의 기준 모델로는 기업 내.외부 환경을 포괄하는 비즈니스 모델과 외부 참조모델이 있다. 과제 발굴 단계에서는 현재 데이터를 소유하고 있는지, 이를 해결하기 위한 방안은 무엇인지 등에 대한 세부적인 구현 및 솔루션에 중점을 두는것이 아니라 문제를 해결함으로써 발생하는 가치에 중점을 두는것이 중요하다.

1) 비즈니스 모델 기반 문제 탐색
과제 발굴을 위한 기본 틀로써 기업 내.외부 환경을 포괄하는 비즈니스 모델이라는 틀(Frame)을 활용하여 가치가 창출될 문제를 노락없이 도출할 수 있다. 비즈니스 모델 관점에서는 해당기업의 사업 모델을 도식화한 비즈니스 모델 캔버스의 9가지 블록을 단순화하여 업무(Operation), 제품(Product), 고객(Customer) 단위로 문제를 발굴하고, 이를 관리하는 두 가지의 영역인 규제와 감사(Audit & Regulation)영역과 지원 인프라(IT & Human Resource) 영역에 대한 기회를 추가로 도축하는 작업을 수행한다.

1) 업무(Operation)
제품 및 서비스를 생산하기 위해서 운영하는 내부 프로세스 및 주용 자원(Resource)관련 주제 도출
예) 생산 공정 최적화, 재고량 최소화 등

2) 제품(Product)
생산 및 제공하는 페품.서비스를 개선하기 위한 관련 주제 도출
예) 제품의 주요 기능 개선, 서비스 모니터링 지표 도출 등

3) 고객(Customer)
제품.서비스를 제공받는 사용자 및 고객, 이를 제공하는 채널의 관점에서 관련 주제 도출
예) 고객 Call 대기 시간 최소화, 영업점 위치 최적화 등

4) 규제와 감사(Regulation & Audit)
제품.서비스를 제공받는 사용자 및 고객, 이를 제공하는 채널의 관점에서 관련 주제 도출
예) 제공 서비스 품질의 이상 징후 관리, 새로운환경 규제 시 예상되는 제품 추출 등

5) 지원 인프라(IT & Human Resource)
분석을 수행하는 시스템 영역 및 이를 운영.관리하는 인력의 관점에서 주제 도출
예) EDW 최적화, 적정 운영 인력 도출 등

현재의 사업 방식 및 비즈니스에 대한 문제 해결은 최적화 및 단기 과제 형식으로 도출될 가능성이 높기 때문에 새로운 문제의 발굴 및 장기적인 접근을 위해서는 기업이 현재 수행하고 있는 비즈니스뿐만 아니라 환경과 경쟁 구조의 변화 및 역량의 재해석을 통한 "혁신(Innovation)"의 관점에서 분석 기회를 추가 도출하는 것이 요구된다. 즉, 현재 사업을 영위하고 있는 환경, 경쟁자, 보유하고 있는 역량, 제공하고 있는 시장 등을 넘어서 거시적 관점의 요인, 경쟁자의 동향, 시장의 니즈 변화, 역량의 재해석 등 새로운 관점의 접근을 통해 새로운 유형의 분석 기회 및 주제 발굴을 수행해야 한다. 이러한 작업을 수행할 때는 분석가뿐만 아니라 해당 기능을 수행하는 직원 및 관련자에 대한 폭넓은 인터뷰와 워크숍 형태의 아이디어 발굴(Ideation)작업이 필요하다.

1) 거시적 관점의 메가 트렌드에서는 현재의 조직 및 해당 산업에 폭넓게 영향을 미치는 사회.경제적 용인을 STEEP로 요약되는 Social(사회), Technological(기술), Economic(경제), Environmental(환경), Political(정치) 영역으로나누어서 좀 더 폭넓게 기회 탐색을 수행한다.

- 사회(Social) 영역
비즈니스 모델의 고객(Customer)영역에 존재하는 현재 고객을 확장하여 전체 시장을 대상으로 사회적 문화적, 구조적 트렌드 변화에 기반한 분석 기회 도출
예) 노령화, 밀레니얼 세대의 등장, 저출산에 따른 해당 사업 모델의 변화 등

- 기술(Technological) 영역
과학, 기술, 의학 등 최신기술의 등장 및 변화에 따른 역량 내재화와 제품.서비스 개발에 대한 분석 기회 도출
예) 나노 기술, IT 융합 기술, 로봇 기술의 고도화에 따른 기존 제품의 Smart화 등

- 경제(Economic) 영역
산업과 금융 전반의 변동성 및 경제 구조 변화 동향에 따른 시장의 흐름을 파악하고 이에 대한 분석 기회 도출
예) 원자재 가격, 환율, 금리 변동에 따른 구매 전략의 변화 등

- 환경(Environmental) 영역
환경과 관련된 정부, 사회단체, 시민사회의 관심과 규체 동향을 파악하고 이에 대한 분석 기회 도출
예) 탄소 배출 규제 및 거래 시장 등장에 따른 원가 절감 및 정보 가시화 등

- 정치(Political) 영역
주요 정책방향, 정세, 지정학적 동향 등의 거시적인 흐름을 토대로 한 분석 기회 도출
예) 대북 관계 동향에 따른 원자재 구매 거래선의 다변화 등

2)경쟁자 확대 관점에서는 현재 수행하고 있는 사업 영역의 직접 경쟁사 및 제품.서비스뿐만 아니라 대체재와 신규 진입자 등으로 관점을 확대하여 위협이 될 수 있는 상황에 대한 분석 기회 발굴의 폭을 넓혀서 탐색한다.

- 대체제(Substitute) 영역
융합적인 경쟁 환경에서 현재 생산을 수행하고있는 제품.서비스의 대체재를 파악하고 이를 고려한 분석 기회 도출
예) 현재 오프라인으로 제공하고 있는 자사의 상품.서비스를 온라인으로 제공하는 것에 대한 탐색 및 잠재적 위협 파악

- 경쟁자(Competitor) 영역
현재 생산하고 있는 제품.서비스의 주요 경쟁자에 대한 동향을 파악하여 이를 고려한 분석 기회 도출
예) 식별된 주요 경쟁사의 제품.서비스 카탈로그 및 전략을 분석하고 이에 대한 잠재적 위협 파악

- 신규 진입자(New Entrant) 영역
현재 직접적인 제품.서비스의 경쟁자는 아니지만, 향후 시장에 대해서 파괴적인 역할을 수행할 수 있는 신규 진입자에 대한 동향을 파악하여 이를 고려한 분석 기회 도출
예) 새로운 제품에 대한 크라우드 소싱(Crowd Sourcing) 서비스인 Kickstarter의 유사 제품을 분석하고 자사의 제품에 대한 잠재적 위협 파악

3) 시장의 니즈 탐색 관점에서는 현재 수행하고 있는 사업에서의 직접 고객 뿐만 아니라 고객과 접촉하는 역할을 수행하는 채널(Channel) 및 고객의 구매와 의사결정에 영향을 미치는 영향자들(Influencer)에 대한 폭넓은 관점을 바탕으로 분석 기회를 탐색한다.

- 고객(Customer) 영역
고객의 구매 동향 및 고객의 컨텍스트를 더욱 깊게 이해하여 제품.서비스의 개선 필요에 필요한 분석 기회 도출.
예) 철강 기업의 경우 조선 산업과 자동차 산업의 동향 및 주요 거래선의 경영 현황 등을 파악하고 분석 기회 도출 등

- 채널(Channel) 영역
영업 사원, 직판 대리점, 홈페이지 등의 자체적으로 운영하는 채널뿐만 아니라 최종 고객에게 상품.서비스를 전달하는 것에 경로로 존재하는 가능한 경로를 파악하여 해당 경로에 존재하는 채널별로 분석 기회를 확대하여 탐색
예) 은행의 경우 인터넷전문은행 등 온라인 채널의 등장에 따른 변화에 대한 전략 분석 기회 도출 등

- 영향자들(Influencer) 영역
기업 의사결정에 영향을 미치는 주주.투자자.협회 및 기타 이해관계가즤 주요 관심사항에 대해서 파악하고 분석기회 탐색
예)M&A 시장 확대에 따른 유사 업종의 신규 기업 인수 기회 탐색 등

4) 역량의 재해석 관점에서는 현재 해당 조직 및 기업이 보유한 역량뿐만 아니라 해당 조직의 비즈니스에 영향을 끼치는 파트너 너트워크를 포함한 활용 가능한 역량을 토대로 폴넓은 분석 기회를 탐색한다.
- 내부 역량(Competency) 영역
지적 재산권, 기술력 등 기본적인 것 뿐만 아니라 중요하면서도 자칫 간과하기 쉬운 지식, 기술, 스킬등의 노하우와 인프라적인 유형 자산에 대해서 폭넓게 재해석하고 해당 영역에서 분석 기회를 탐색한다.
예) 자사 소유 부동산을 활용한 부가 가치 창출 기회 발굴 등

- 파트너와 네트워크(Partners & Network) 영역
자사가 직접 보유하고 있지는 않지만 밀접한 관계를 유지하고 이쓴 관계사와공급사 등의 역량을 활용해 수행할 수 있는 기능을 파악해보고 이에 대한 분석 기회를 추가적으로도출
예) 수출입.통관 노하우를 활용한 추가 사업기회 탐색 등

2) 외부 참조 모델 기반 문제 탐색
잘 알려진 분제를 푸는 것뿐만 아니라 새로운 문제를 발굴하기 위해서는(문제와 과제를 도출해 내는 기준 모델로서) 유사.동종의 환경에서 기존에 수행한 분석 과제를 살펴보는 것도 주요한 시사점을 도출해 준다.
유사.동종 사례 벤치마킹을 통한 분석기회 발굴은 제공되는 산업별, 업무 서비스별 분석테마 후보 그룹(Pool)을 통해 "Quick & Easy"방식으로 필요한 분석 기회가 무엇인지에 대한 아이디어를 얻고 기업에 적용할 분석테마 후보 목록을 위크숍 형태의 브레인스토밍(Brain Storming)을 통해 빠르게 도출하는 방법이다.

특히 현재 환경에서는 데이터를 활용하지 않은 업종 및 서비스가 사실상 존재하지 않기 때문에 데이터를 분석을 통한 인사이트(Insight)를 도출하고 업무에 활용하는 사례들을 발굴하여 자사의 업종 및 업무 서비스 에 적용할 수 있다. 따라서 산업 및 업종을 불문하고 데이터 분석 사례를 기반으로 분석테마 후보 그룹을 미리 정의하고 그 후보 그룹을 통해 해당 기업에 벤치마킹할 대상인 분석기회를 고려한다면 빠르고 쉽게 분석기회를 도출할 수 있다.

평상시 지속적인 조사와 데이터 분석을 통한 가치 발굴 사례를 정리하여 풀(Pool)로 만들어 둔다면 과제 발굴 및 탐색 시 빠르고 의미 있는 분석 기회 도출이 가능하다. 또한 유사.동종 업계뿐만 아니라 타 업종 및 분양의 데이터 부석 활용 사례 또한 정리해 놓을 경우 새로운 주제 탐색에 도움이 된다.

3) 분석 유즈 게이스(Analytics Use Case) 정의
현재의 비즈니스 모델 및 유사.동종사례 탐색을 통해서 빠짐없이 도출한 분석 기회들을 구체적인 과제로 만들기에 앞서 분석 유즈 게이스로 표기하는 것이 필요하다. 분석 유즈케이스는 풀어야 할 문제에 대한 상세한 설명 및 해당 문제를 해결했을 때 발생하는 효과를 명시함으로써 향후 데이터 분석 문제로의 전환 및 적합성 평가에 활용하도록 한다.

분석 유즈 케이스 예시

업무      분석 유즈 게이스                                    설명                                                효과
재무       자금 시재 예측                일별로 예정된 자금 지출과 입금을 추정           자금 과부족 현상 예방,
                                                                                                                           자금 운용 효율화
            구매 최적화                   구매 유형과 구매자별로 과거 실적과 구매               구매 비용 절감
                                                  조건을 비교.분석하여 구매 방안 도출
고객     서비스 수준 유지               서비스별로 달성 수준을 측정하고 평가한             품질수준 제고,
                                                 뒤 목표 수준을 벗아났으면 경보 발행                    고객만족 제고
           고개간족 달성                고객 세그먼트별로 만족 수준을 측정하고               고객만족 제고,
                                                 이상이 있으면 원인을 분석하여 대책 강구              고객유지 향상
         파이프라인 최적화            파이프라인 단계별로 고객 상태를 파악하고           목표 매추 달성,
                                                  수조 규모를 예상하여 필요한 고객 기회를          고객반응률 향상
                                                추정하여 영업 촉진   
판매  영업성과 분석                  영업 직원별 사용 원가(급여 포함)와 실적을          영업 수율 향상,
                                                분석하고 부진한 영업 직원 세그먼트를 식별         영업 직원 생산성 제고
                                                하여 영업 정책에 반영

나. 문제 정의(Problem Definition)단계
식별된 비즈니스 문제를 데이터의 문제로 변환하여 정의하는 단계이다. 앞서 수행한 문제 탐색의 단계가 무엇을(What) 어떤 목적으로(Why)수행해야 하는지에 대한 과점이었다면, 본 단계에서는 이를 달성하기 위해서 필요한 데이터 및 기법(How)을 정의하기 위한 데이터 분석의 문제로의 변환을 수행하게 된다. 예를 들어, '고객 이탈의 증대'라는 비즈니스 문제는 '고객의 이탈에 영향을 미치는 요인을 식별하고 이탈 가능성을 예측'하는 데이터 분석 문제로 변환될 수 있다.

데이터 분석 문제의 정의 및 요구사항은 분석을 수행하는 당사자뿐만 아니라 해당 문제가 혜결되었을 때 효요을 얻을 수 있는 최종사용자(End User)과전ㅁ에서 이루어져야 한다. 데이터 분석 문제가 잘 정의되었을때 필요한 데이터의 정의 및 기법 발굴이 용이하기 때문에 가능한 정확하게 분석의 관점으로 문제를 재정의할 필요가 있다.

다. 해결방안 탐색(Solution Search)단계
이 단계에서는 정의된 데이터 분석 문제를 해결하기 위한 다양한 방안이 모색된다. 동일한 데이터 분석문제라 해도 어떤 데이터 또는 분석 시스템을 사용할 것인지에 따라서 소용되는 예산 및 활용 가능한 도구(Tool)가 다르기 때문에 다각도로 고려할 필요가 있다. 즉, 기존 정보시스템의 단순한 보완으로 분석이 가능한지, 엑셀 등의 간단한 도구로 분석이 가능한지, 또는 하둡 등 분산 병렬처리를 활용한 빅데이터 분석 도구를 통해 보다 체계적이고 심도 있는 방안이 고려되는지 등등 여러 대안이 도출될 수 있다. 또한 분석 역량을 기존에 가지고 있는 지의 여부를 파악하여 보유하고 있지 않은 경우에는 교육이나 전문 인력 채용을 통한 역량을 확보하거나 분석 전문 업체를 활용하여 과제를 해결하는 방안에 대해 사전 검토를 수행한다.

라. 타당성 검토(Feasibility Study)단계
도출된 분석 문제나 가설에 대한 대안을 과제화하기 위해서는 다음과 같은 다각적인 타당성 분석이 수행되어야 한다.

1) 경제적 타당성
비용 대비 편익 분석 관점의 접근이 필요하다. 비용 항목은 데이터, 시스템, 인력, 유지보수 등과 같은 분석 비용으로 구성된다. 편익으로는 분석 결과를 적용함으로서 실질적 비용 절감, 추가적 매출과 수익 등과 같은 경제적 가치로 산출된다.

2) 데이터 및 기술적 타당성
데이터 분석에는 데이터 존재 여부, 분석 시스템 환경, 그리고 분석 역량이 필요하다. 특히, 분석 역량의 경우 그림 처럼 실제 프로젝트 수행 시 걸림돌이 되는 경우가 많기 때문에 기술적 타당성 분석시 역량 확보 방안을 사전에 수립해야 한다. 이를 효과적으로 평가하기 위해서는 비즈니스 지식과 기술적지식이 요구되기 때문에 비즈니스 분석가, 데이터 분석가, 시스템 엔지니어 등과의 협업이 수반되어야 한다.
______________________________________________________________________________________________________

도출된 여러 대안 중에서 평가 과정을 거쳐 가장 우월한 대안을 선택한다. 도출한 데이터 분석 문제 및 선정된 솔루션 방안을 포함하여 이를 분석 과제 정의서의 형태로 명시하는 후속작업을 시행하며 이는 프로젝트 계획의 입력물로 활용횐다.

2. 상향식 접근법(Bottom Up Approach)
한 의약제조사는 특허기간이 만료된 의약품 약 2천 종류의 데이터를 분석, 상호 결합하여 새로운 의약품을 개발하려고 시도하였다. 의약품 집합으로부터 두 개의 조합을 선택할 수 있는 방법은 백만 개 이상이기 때문에 이 회사는 새로운 결합의 효과성을 검정하기 위하여 다양한 기법을 적용하여 데이터를 분석하였다. 이런한 분석 사례는 절차가 규정된 하향식 문제해결 방식이 아니라 경험적인 과거 데이터를 무작정 결합하여 상향식으로 정보 혹은 지식을 얻고자 하는 새로운 분석 패러다임이라 할 수 있다.

여기에서는 전통적인 하향식 문제 해결 방식과 대비하여 기업에서 보유하고 있는 다양한 원천 데이터로부터 분석을 통하여 통찰력과 지식을 얻는 상향식 접근방법을 기술한다. 사향식 접근방법은 그림처럼 다양한 원천 데이터를 대상으로 분석을 수행하여 가치 잇는 문제를 도출하는 일련의 과정이다.

- 기존 하향식 접근법의 한계를 극복하기위한 분석 방법론
지금까지 가장 일반적으로 사용되고 있는 문제 해결 방식은 앞서 설명한 것과 같은 하향식의 놀리적인 단계별 접근법이다. 기존 접근 방법인 논리적인 단계별 접근법은 문제의 구조가 분영하고 문제를 해결하고 해결책을 도출하기위한 데이터가 분석가 및 의사결정자에게 주어져 있음을 가정하고 있기 때문에 솔루션 도출에는 유효하지만 새로운 문제의 탐색에는 한계가 있다. 따라서 기존의 논리적인 단계별 접근법에 기반한 문제해결 방식은 최근 복잡하고 다양한 환경에서 발생하는 문제에는 적합하지 않을 수 있다.

이를 해결하기 위새서 스탠포드 대학의 d.shool(Institute of Design at Stanford)은 디자인 사고(Design Thinking)접근법을 통해서 전동적인 분석적 사고를 극복하려고 한다. "이미 우리가 알고 있는 것" 즉 분석가의 문제에 대한 분석 접근법의 한계를 극복하기 위해서 현장 관찰과 감정이입, 즉 대상의 관점으로의 전환을 수행한다. 통상적인 관점에서는 분석적으로 사물을 인식하려는 'Why'를 갖오하지만, 이는 우리가 알고 있다고가정하는 것이기 때문에 문제와 맞지 않는 솔류션인 경우 오류가 발생할 소지가 있다. 그렇기 때문에, 답을 미리 내는 것이 아니라 사물을 있는 그대로 인식하는 'What' 관점에서 보아야 한다는 것이다. 객과적으로 존재하는 데이터 그 자체를 관찰하고 실제적으로 행동에 옮김으로써 대상을 좀 잘 이해하는 장식으로의 접근을 수행하는 것이다. 이와 같은 점을 고려하여 d.school 에서는 첫 단계로 감정이임(Empathize)을 강조하고 있다.

_______________________________________________________________________________________________

일반적으로 상향식 접근 방식의 데이터 분석은 비지도학습(Unsupervised Learning)방법에 의해 수행된다. 비지도학습은 데이터 분석의 목적이 명확히 정의된 형태의 특정 필드의 값을 구하는 것이 아니라 데이터 자체의 결합, 연관성, 유사성 등을 중심으로 데이터의 상태를 표현하는 것이다. 데이터 마이닝 기법을 예로들면, 장바구니 분석, 근집 분석, 기술 통계 및 프로파일링 등이 이에 속한다.
이와 반대로 명확한 목적하에 데이터분석을 실시하는 것은 지도학습(Supervised Learning)이라고하며 분류, 추측, 예측, 최적화를 통해 사용자의 주도 하에 분석을 실시하고 지식을 도축하는 것이 목적이다. 예를 들어서 그림에서 O와 X를 구분 짓게 하는 분류(Classification)는 지도학습에 해당되고, 인자들 간의 유사성을 바탕으로 수행하는 군집화(Clustering)는 비지도학습에 해당한다. 지도학습의 경우 결과로 도출되는 값에 대새서 사전에 인지하고 어떠한 데이터를 넣었을 때 어떠한 결과가 나올지를 예츨하는것이라면 비지도학습의 경우 목표값을 사전에 정의하지 않고 데이터 자체만을 가지고 그룹들을 도출함으로써 해석이 용이하지는 않지만 새로운 유형의 인사이트를 도출하기에 유용한 방식으로 활용할 수 있다.

__________________________________________________________________________________________________
통계적 분석에서는 인과관계 분석을 위해 가설 을 설정하고 이를 검정하기 위해 모집단으로부터 표본을 추출하고 그 표본을 이용한 가설검정을 실시하는 방식으로 문제를 해결하였다. 그러나 빅데이터 환경에서는 이와 같은 노리적인 인과관계 분석뿐만 아니라 상관과계 분석 또는 연관 분석을 통하여 다양한 문제 해결에 도움을 받을  수 있다. 즉, 인과관계(Know-why)로 부터 상관관계(Know-affinity)분석으로의 이동이 빅데이터 분석에서의 주요 변화라고 할 수 있다. 다양의 데이터 분석을 통해서 "왜" 그러한 일이 발생하는지 역으로 추적하면서 문제를 도출하거나 재정의 할 수 있는 것이 상향식 접근 방법이다.

- 시행착오를 통한 문제 해결
프로토타이핑(Prototyping)접근법은 사용자가 요구사항이나 데이터를 정확히 규정하기 어렵고 데이터 소스도 명확히 파악하기 어려운 상황에서 일단 분석을 시도해 보고 그 결과를 확인해 가면서 반복적으로 개선해 나가는 방법을 말한다. 하향식 접근방식은 문제가 정형화되어 있고 문제해결을 위한 데이터가 완벽하게 조직에 존재할 경우에 효과적이다. 이에 반하여, 프로토타이핑 방법론은 비록 완전하지는 못하다 해도 신속하게 해결책이나 모형을 제시함으로써 이를 바탕으로 문제를 좀 더 명확하게 인식하고 필요한 데이터를 식별하여 구체화할 수 있게 하는 유용한 상향식 접근 방식이다.

프로토타이핑 접근법의 기본적인 프로세스는 가설의 생성(Hypotheses), 디자인에 대한 실험(Design Experiments), 실제 환경에서의 테스트(Test), 테스트 결과에서의 통찰(Insight) 도출 및 가설 확인으로 구성된다. 학습이라는 목표를 가지고 잘 설계된 프로토타이핑을 지속하는 경우에, 실험이 가지고 있는 불명확성(Uncertainty)은 감소하고 의도했던 결과를 도출할 수 있는 성공 가능성은 높아진다. 한 번의 분석을 통해서 의도했던 겨로가가 나오기 쉽지 않은 동적인 환경에서 최대한 빨리 결과를 보여주고 해당 내용을 토대로 지속적인 반복을 수행하는 프로토타이핑 방식이 빅데이터 분석 환경에서는 보다 유용하다고 알려져 있다.

빅데이터 분석 환경에서 프로토타이핑의 필요성을 상세히 정리하면 다음과 같다.

- 문제에 대한 인식 수준: 문제 정의가 불명확하거나 이전에 접해보지 못한 새로운 문제일 경우 사용자 및 이해 관계자는 프로토타입을 이용하여 문제를 이해하고 이를 바탕으로 구체화하는데 도움을 받을 수 있다.

- 필요 데이터 준재 여부의 불확실성: 문제 해결을 위해 필요한 데이터의 집합이 모두 존재하지 않을 경우, 그 데이터의 수집을 어떻게 할 것인지 또는 그 데이터를 다른 데이터로 대체할 것인지 등에 대한 데이터 사용자와 분석가 간의 반복적이고 순환적인 협의 과정이 필요하다. 대체 불가능한 데이터가 존재하는지 사전에 확인한다면 불가능한 프로젝트를 수행하는 리스크를 사전에 방지할 수 있다.

- 데이터의 사용목적의 가변성: 데이터의 가치는 사전에 정해진 수집목적에 따라 확정되는 것이 아니고 그 가치가 지속적으로 변화할 수 있다. 따라서 조직에서 보유중인 데이터라 하더라도 기존의 데이터정의를 재검토하여 데이터의 사용목적과 범위를 확대할 수 있을 것이다. 예를 들면, 이동통신사에서 수집하는 사용자의 위치추적은 사용자의 호울을 효율적으로 처리하기 위한 원래의 목적으로부터, 사용자들의 즉정 시간에 많이 모이는 장소가 어디 인가를 분석하는 정보로 활용이 가능하다.

3. 분석과제 정의
다양한 방식을 통해서 도출한 분석과제를 분석과제 정의서 양식을 활용하여 보다 상세하게 정의한다.
분석과제 정의서는 향후 프로젝트 수행계획의입력물로 사용되기 때문에 프로젝트 수행하는 이해관계자가 프로젝트의 방향을 설정하고 성공여부를 판별할 수 있는 주요한 자료로서 명확하게 작성되어야 한다.

분석과제 정의서를 통해 분석별로 필요한 소스 데이터, 분석방법, 데이터 입수 및 분석의 난이도, 분석수행주기, 분석결과에 대한 검증 오너십, 상세 분석 과정 등을 정의한다. 분석 데이터 소스는 내.외부의 비구조적인 데이터와 소셜 미디어및 오픈 데이터까지 범위를 확장하여 고려하고 분석 방법 또한 상세하게 작성한다.