본문 바로가기

Data Analysis '◡'✿/삼성SDS Brightics AI & Studio

[Brightics AI] Brightics Studio 튜토리얼(Tutorial) 실습 : Dimension Reduction편 (1) 설문지 데이터 요인분석

 

 

 

 

 

 

 

안녕하세요, Soa입니다!

٩( ᐛ )و

 

 

 

 

이번 포스팅에서는 튜토리얼 프로세스 카테고리 중에

dimension Reduction, 차원 축소를 선택해서 실습해볼 예정인데요~

 

 

 

dimension Reduction차원 축소이며,

영어 표현은 Dimensionality reduction으로도 쓰입니다!

 

조금 생소한 단어인데, 이 단어를 검색해보면

주로 머신러닝과 데이터 사이언스 분야에서 사용되는 용어임을 알 수 있습니다.

 

 

간단하게 말하면 높은 차원의 데이터 때문에 문제가 발생하기에 차원 축소가 필요합니다!

실습을 진행하기 전에 간략하게 설명해드릴게요 ^ㅇ^~

 

 

 

그래서 오늘은 Dimension reduction를 설문지의 데이터를 요인 분석하는 데에

활용하는 방법에 대해서 함께 알아보고 실습해보겠습니다!

 

 

 

 

 

이 카테고리에는 총 4가지의 프로세스가 속해있는데,

제가 그 중에서도 '설문지 데이터 요인 분석'을 선택한 이유는

마케팅 및 기획 분야뿐만 아니라 캡스톤과 같은 설계를 진행할 때에도

유용하게 사용할 수 있는 데이터 분석 프로세스인 것 같아서 골라왔습니다!

 

 

제가 저번 학기에 학교에서 SPSS 관련 수업을 들을 때,

설문지 응답 데이터를 활용해서 분석을 했었기도 하고

실제로 소비자에게서 얻어낸 데이터를 어떻게 분석하느냐는 중요하기 때문에

이 데이터 분석 프로세스를 알아두면 좋을 것 같다고 생각했어요~!

 

 

 

그럼 간략하게 Dimension Reduction에 대해서 알아볼까요?

 

 

 

 

 

 

 


 

 

■ dimension Reduction이란?

 

 

쉽게 말하자면 Demension Reduction, 차원 축소

데이터에서 필요 없는 원소를 제거하는 과정을 의미합니다!

 

 

필요 없다는 기준은 구분 지을 수 있는 특성인지의 여부입니다.

 

 

 

 

 

 

 

 

 

 

간단하게 이미지로 요약해보았습니다.

 

 

 

 

 

 

데이터는 한 가지의 정보만을 담고 있지 않습니다.

 

저희가 원하는 데이터 분석이 단순히 1과 0으로만 구분하기를 원하는 데이터가 아니라

특히 글, 사진과 같은 복잡한 데이터를 다루기 원할수록 당연한 사실이죠!

 

 

데이터들을 여러 원소들로 구성되어있으며,

이 원소들은 데이터의 특성들을 담고 있습니다.

 

사람으로 따지자면 눈, 코, 입과 같은 특징들에 대한 데이터를 말하죠!

 

 

그럼 이 데이터들 중에 필요 없는 데이터란 무엇일까요?

 

 

예를 들어, 거북이에 대한 3가지의 데이터가 있다고 할 때

데이터 1, 데이터 2, 데이터 3은 각각 다른 거북이의 특성을 담고 있습니다.

 

그런데 저 세 마리의 거북이들은 모두 거북이 등껍질을 가지고 있습니다.

그렇다면 저 거북이들을 등껍질의 유무로 구분할 수 있을까요?

 

 

아니죠! 그렇다면 저 원소들을 데이터들을 구분 지을 수 없는,

필요 없는 특성이자 원소가 되는 것입니다.

 

 

 

그럼 그냥 무시하면 되는 거 아니냐고요?

 

무시하기에는 높은 차원의 데이터가 문제를 발생시킵니다 ㅠ_ㅠ

 

 

많은 특성을 가지고 있는 데이터는, 높은 차원을 가지고

연산 과정이 복잡해지고 노이즈가 상대적으로 낮은 차원의 데이터보다 많이 발생합니다.

 

 

데이터에 많은 요소들이 있다면, 더 많은 계산 과정과 저장 공간이 필요해질 뿐만 아니라

시각화하는 것이 어려워집니다..!

 

그렇기 때문에 차원을 축소시키는 것이 더 효율적이죠!

 

 

 

그렇기 때문에 데이터를 구분 지을 수 없는 특성을 가지는 원소들을 제거하는 과정인

차원 축소, dimension Reduction이 필요하답니다!

 

 

차원 축소 방법에는 크게 Feature Selection과 Feature Extraction으로 나눌 수 있는데,

자세한 설명은 생략하고 나중에 기회가 생긴다면 설명드리겠습니다!

 

 

 

 

이제 차원 축소를 통해 설문지 데이터 요인 분석하는 방법에 대해서 알아볼까요~?

 

 

 

 

 

 

 

 


 

 

 

 

■ Tutorial - dimension Reduction (1) 설문지 데이터 요인 분석

 

 

 

[ Manual View Setting Condition ]

● Studio 1.1, 분석 프로세스별 보기, dimension Reduction - '설문지 데이터 요인 분석'

 

 

실습에 필요한 데이터와 모델은 튜토리얼 맨 아래에 있습니다!

다운로드를 진행해주세요~

 

 



 

 

 

 

 

저는 모두 다운로드를 진행했습니다!

 

19_py_survey.csv
0.01MB
19_py_survey_description.csv
0.00MB
19_py_survey_factoranalysis.json
0.04MB

 

 

 

 

Brightics Studio에서 19_py_survey_factoranalusis.json 을 모델로,

입력 데이터로는 19_py_survey.csv 19_py_survey_description.csv 를 사용해서

실습을 진행하도록 하겠습니다!

 

 

 

실습을 본격적으로 진행하기 이전에,

프로세스의 시나리오와 목표를 함께 살펴보면서

이 프로세스를 통해서 어떤 것을 알 수 있는지 등에 대해서 알아보겠습니다.

 

 

 

 

 

 

 

 

 

포스팅 초반에서 언급했던 내용이죠?

시나리오에서도 설문지 데이터 요인 분석하는 과정은 기획에서도 사용될 수 있다는 것을 알 수 있습니다!

 

 

설문지 데이터 요인 분석은 설문지 데이터를 활용하기 이전에,

설문지 데이터의 신뢰도를 측정하여 확인하는 과정입니다.

 

 

이 과정을 통해서

 

1) 그룹별 분석 복습

2) 설문지 신뢰도 측정

3) Factor Analysis 실습

4) HeatMap을 이용한 결과 시각화 및 해석

 

에 대해서 알 수 있습니다!

 

 

 

 

프로세스 순서는 다음의 두 과정으로 이루어져 있습니다.

1) Data Load

2) Modeling

 

 

 

이전에 실습했던 부분은 간단하게 설명하면서 지나가겠습니다!

 

그럼 본격적으로 실습을 진행해볼까요?

 

 

 

 

 


 

 

 

1) Data Load

 

 

 

Brightics Studio에서 19_py_survey_factoranalusis.json 를 불러오겠습니다.

 

 

 

 

 

 

 

Load-Survey와 Load-Survey Description에

각각 데이터 19_py_survey.csv 와 19_py_survey_description.csv 를 Load 하겠습니다.

 

 

 

 

 

Load-Survey에는 19_py_survey.csv 를 넣고,

 

 

Run을 해주면 다음과 같은 데이터 테이블이 나타납니다.

 

 

 

테이블의 Column은 각각

 

id : 설문지 번호, 응답자 번호

product : 제품 별칭(제품명)

q1~q15 : 설문 문항별 응답 결과

 

를 의미합니다.

 

 

응답 결과는 1에서 5까지인데,

1에 가까울수록 해당 문항 속성과 비슷하며(문항이 '예쁜가?'라면 '매우 예쁘다')

5에 가까울수록 해당 문항 속성과 반대입니다.

 

 

 

 

 

이번에는 Load-Survey Description에 19_py_survey_description.csv 를 Load 해주겠습니다.

 

 

 

 

Run을 눌러주면 다음과 같은 테이블이 출력됩니다.

 

 

 

item은 설문지 문항 번호를 의미하며,

label은 문항 내용을 의미합니다.

 

 

 

 

 

 

 


 

 

2) Modeling

 

 

Data Load 과정에서 첫 번째 Load 데이터 테이블 내용을 잘 보셨다면,

제품이 두 가지인 것을 아실 수 있을 겁니다.

 

 

 

 

 

이렇게 제품 R과 C로, 총 두 가지입니다.

 

제품이 두 가지이기 때문에, 제품 별로 2개의 데이터 테이블을 생성해야 합니다.

 

 

 

 

 

 


 

 

 

 

 

○ Python Script : Groupby

 

Python Script를 사용해서 그룹 별(제품 별)로 데이터 테이블을 출력하겠습니다.

 

 

코드는 다음처럼 입력해주시면 됩니다.

 

import pandas as pd

indata=inputs[0]
indata_grouped=dict(list(indata.groupby(['product'])))
resultR=indata_grouped['R']
resultC=indata_grouped['C']

 

 

 

Run을 눌러 실행해주면 다음과 같은 데이터 테이블이 형성되는데,

 

 

 

 

이렇게 product 별로 형성된 것을 확인할 수 있습니다.

 

처음 데이터를 로드할 때의 데이터 테이블에서는 한 명의 응답자가

제품 별로 하나의 응답, 총 두 개를 했기 때문에, 제품 별로 데이터를 나누니 하나의 응답만이 존재하게 됩니다.

 

 

 

 

○ Python Script : cronbach & FA

 

 

 

함수 이름에서도 알 수 있을... 지도 모르지만

이번에는 Pythoh Script를 이용해서 Cronbach's alpha 값을 계산해서 설문지의 신뢰도를 측정하고,

Factor의 개수를 3개로 설정해서 Factor Analysis를 수행하게 됩니다!

 

 

일단 Python Script는 다음과 같습니다.

 

import pandas as pd
import numpy as np
from sklearn.decomposition import FactorAnalysis

# cronbach's alpha
def cronbach_alpha(x):
  xdim=x.shape
  cvsum=x.var(axis=0).sum()
  rsvar=x.sum(axis=1).var()
  x['cronbach_alpha']=xdim[1]/(xdim[1]-1)*(1-cvsum/rsvar)
  return (x)

indataR=inputs[0]
tmp=indataR.loc[:,"q1":"q15"]
df0=cronbach_alpha(tmp)

indataC=inputs[1]
tmp=indataC.loc[:,"q1":"q15"]
df1=cronbach_alpha(tmp)
cronbach=pd.concat([df0,df1])


# Factor Analysis
fa=FactorAnalysis(n_components=3,random_state=0)

fafit=fa.fit(df0.loc[:,"q1":"q15"])
faR=pd.DataFrame(np.transpose(fafit.components_),columns=['Factor1','Factor2','Factor3'])
faR['product']='R'
faR['factor_q']=pd.DataFrame(list(indataR.columns)[2:])

fafit=fa.fit(df1.loc[:,"q1":"q15"])
faC=pd.DataFrame(np.transpose(fafit.components_),columns=['Factor1','Factor2','Factor3'])
faC['product']='C'
faC['factor_q']=pd.DataFrame(list(indataC.columns)[2:])

factors=pd.concat([faR,faC])
factors=factors[['product','factor_q','Factor1','Factor2','Factor3']]

 

 

 

매우 길군요........

 

위의 스크립트를 실행하게 되면 두 가지의 데이터 프레임이 생성됩니다.

 

 

 

 

 

 

Cronbach's alpha값을 한번 확인해볼까요?

 

R 제품은 0.6512, C 제품은 0.7833으로 0.6 이상이므로

R과 C, 두 제품군에 대한 설문조사가 모두 신뢰할만하다고 할 수 있습니다.

 

 

 

 

 


 

 

 

 

○ Join

 

 

Join이라는 함수는 SQL에서도 쓰이는 용어와 비슷합니다.

Join 또는 결합 구문은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것을 말하는데요.

'결합, 합치다' 라는 의미의 기능을 수행합니다.

 

Join을 수행하고 나면

테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 냅니다.

 

 

Brightics에서는 어떤 기능을 수행하는지 실습을 진행하면서 이해해보겠습니다.

 

 

 

 

튜토리얼의 설명을 보니 Join 함수를 이용해서

Factor Analysis 결과와 설문지 조사항목에 대한 설명 데이터를 결합하고,

 

각 조사 항목에 대한 의미를 추가하여 해석을 용이하게 하고자 하는 작업이라고 합니다.

 

 

 

 

파라미터는 다음과 같이 설정하면 됩니다.

 

[ parameter setting ]

Join Type : Inner Join

Key Condition(Left Keys : factor_q, Right_Keys : item)

 

 

 

함수를 실행하게 되면 다음과 같은 테이블이 출력됩니다.

 

 

 

 

결과를 살펴보니 결과 3가지와 factor_q라는 변수가 추가 출력된 것을 볼 수 있습니다.

 

factor_q는 item과 동일한 값을 가지고 있습니다.

factor_q의 q는 question을 의미하는 것을 알 수 있네요! 

 

 

 

 

 


 

 

○ Filter : R

 

 

이번에는 Filter 함수를 이용해서

R 제품만 남기고 성분 행렬을 시각화하는 작업을 진행하겠습니다.

 

 

 

 

파라미터는 다음과 같이 설정하며,

 

[ parameter setting ]

Condition : product == 'R'

 

 

 

차트는 다음과 같이 설명해주시면 됩니다.

 

[ chart setting ]

Chart Type : Heat map(Matrix)

X-axis(factors_Factor1, factors_Factor2, factors_Factor3)

Y-axis(label : item)

 

 

 

 

X축에서 설정한 factors_Factor1,2,3에 대해서 자세히 보겠습니다.

 

 

성분 1, factors_Factor1 : 고급스러움, 편안함, 좋음 등에 대한 척도

성분 2, factors_Factor2 : 세련, 선명함 등에 대한 척도

성분 3, factors_Factor3 : 멋짐, 새로운 등에 대한 척도 (성분 행렬 값이 음수이므로 역산 문항)

 

 

출력 결과는 다음과 같습니다.

 

 

 

1에 가까울수록 빨강(따뜻한 색)에 가까워지고,

-1에 가까워질수록 파랑(차가운 색)에 가까워집니다.

 

 

3번째 성분은 역산 문항이었으므로

-1에 가까울수록 문항 속성에 가깝다는 뜻이죠! 

 

 

 

 

 


 

 

 

○ Filter : C

 

 

이번에는 위와 과정과 비슷하게, Filter 함수를 이용해서

C 제품만 남기고 성분 행렬을 시각화하는 작업을 진행하겠습니다.

 

 

 

 

파라미터는 다음과 같이

 

[ parameter setting ]

Condition : product == 'C'

 

 

 

차트는 다음과 같이 설명해주시면 됩니다.

 

[ chart setting ]

Chart Type : Heat map(Matrix)

X-axis(factors_Factor1, factors_Factor2, factors_Factor3)

Y-axis(label : item)

 

 

 

 

X축에서 설정한 factors_Factor1,2,3의 속성에 대해서 자세히 보겠습니다.

 

성분 1, factors_Factor1 : 호감, 매력, 품위 등에 대한 척도

성분 2, factors_Factor2 : 강렬한, 선명한 등에 대한 척도

성분 3, factors_Factor3 : 어두운, 멋짐 등에 대한 척도

 

 

 

 

실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

 

 

 

 

 

위의 출력 결과와 이번 출력 결과를 한번 잘 살펴보시면,

측정 내용이 유사한 문항들끼리 구분된 것을 확인할 수 있습니다.

 

 

시각화하고 값에 따라서 색을 달리하니 한눈에 알아보기 쉽네요~!

 

 

 

 

 


 

 

 

이번 프로세스를 통해서 설문지 신뢰도를 측정해서,

신뢰할 수 있는 설문지 임일 확인할 수 있었고

 

 Factor Analysis 를 이용하여 3개로 그룹화함으로써

이후 추가 분석을 통해 활용할 수 있는 데이터로 만들었습니다!

 

 

 

 

 

 

 


 

 

 

끄읏-!

 

 

 

중간중간에 사용되는 함수와 데이터 분석 용어를

간단하게 설명을 드리긴 했지만, 아직 어려운 것 같네요... ㅠ_ㅠ

 

 

다음에는 좀 더 자세한 설명을 하겠습니다..! (반성)

 

 

 

다음 포스팅은 더 유익한 포스팅으로 돌아올게요~!

 

 

 

 

혹시라도 건너뛰는 과정에서 이해가 힘든 부분이 있으면

댓글에 어려운 부분에 대해서 말씀해주시거나,

이전 포스팅을 참고해주시면 감사하겠습니다! :)

 

 

 

 

다음 포스팅에서 만나요!

٩( ᐛ )و

 

 

 

 

 

* Brightics 서포터즈 활동의 일환으로 작성된 포스팅입니다. *

반응형