머신러닝 04. 비지도학습: 일반연관분석 (동시발생사건)


    목차
    1. 데이터셋 로딩
    2. 데이터셋 기술통계
      (1) 데이터셋 조회: View() / itemInfo()
      (2) 데이터셋 이미지로 조회: image()
      (3) 데이터셋 기술통계: summary()
    3. 데이터셋 시각화
      (1) 빈발 항목 발생빈도와 시각화: itemFrequency() / barplot() / itemFrequencyPlot()
      (2) 히트맵: crossTable() / gplots::heatmap.2() / gplots::heatmap() / d3heatmap::d3heatmap()
    4. 연관분석(장바구니 분석): arules
      (1) apriori(): supp = , conf =
      (2) 연관규칙 기초통계량: summary()
      (3) 연관규칙 전체 내용 조회: inspect()
      (4) 연관성 규칙의 특정 부분 지정해 호출: 1대1 규칙 확인 등
      (5) 부분일치 & 완전일치 키워드 지정조회: %pin% / %ain%
      (6) 특정 품목 기준으로 규칙 조회: rhs = , lhs =
      (7) 지지도, 신뢰도 기준으로 규칙 조회: supp = , conf =
      (8) 규칙 시각화: arulesViz::plot()
    5. 분석된 규칙 하드디스크에 저장: arules::write()
    추가. 워드클라우드로 데이터 조회: RColorBrewer, wordcloud
      (1) 색깔 준비 & 단어 준비: RColorBrewer::brewer.pal, itemLabels()
      (2) 워드클라우드: wordcloud()



015, 016

● 일반 연관성은 한 번에 동시에 발생하는 비즈니스. 카트에 뭐뭐 담았는지만 알면 됨.

순차 연관성은 예를 들면 중국인이 첫 한국 여행 때 쌍꺼풀, 두번째에 코, 세 번째에 양악 수술 하듯 순차적으로 발생하는 비즈니스. 아이템에 시간 별로 추적할 수 있어야 함.

협업필터링은 아이템에 고객 프로필을 결합. 철수와 길동이 비슷한 특성. 길동이가 이 상품 사면 철수도 비슷한 구매 할 것이라고 예상.

● 머신러닝에서 오해하기 쉬운 게 규칙 개수는 알 수 없지만, 나오는 규칙을 보면 일정한 패턴이 있다.

● 보통은 3가지 패턴으로 나눈다.

행동가능한 규칙. 이건 때로 실현하기 애매한 내용이 있다.

사소한 규칙. 예를 들면 페인트 사면 붓을 사는 것.

설명/해석 불가능한 규칙

● 행동가능한 규칙을 유효하게 활용하려면 어떻게 해야 할까?

기저귀 쿠폰과 맥주 쿠폰을 같은 쿠폰북 페이지에 두거나, 기저귀 산 사람에게 맥주 쿠폰 주거나, 맥주 산 사람에게 기저귀 쿠폰 주는 이벤트 하기.

● 통계는 인과성을 중시하지만, 스몰데이터에서 빅데이터로 넘어가면서 머신러닝은 상관성에 중점을 두고 분석을 해나간다.

● 근데 논리 근거가 중요하다고 했잖아, 왜 고객들은 기저귀와 맥주를 같이 사는 건지 알아내야 한다.

이건 미국 사례인데, 신혼부부의 경우 목요일 저녁 기저귀와 맥주 사는 사례 많더라. 왜냐하면 금요일 회사 마치고 바로 캠핑 가기 위한 준비로 기저귀와 맥주를 사는 것이라고 레포트엔 설명.

● 이렇게 논리적인 패턴이 추가 되면 행동가능한 규칙이라고 부름.

● 사소한 규칙은 손쉽게 연상되는 것. 이미 온오프라인에 같은 장소에서 두 물건 팔거나 하기 때문에 이벤트까지 할 필요 없는 상품들.

● 신선한 패턴이긴 한데 해석이나 설명이 어려운 규칙을 설명/해석 불가능한 규칙. 이때 필요한 게 실제 작동하는지 AB Test 해보면 편리.


—————코딩——————————————————————————————————


1. 데이터셋 읽고 raw 객체에 담기




2. 데이터셋 기본 파악


(1) 데이터셋 조회: View() / itemInfo()


(2) 데이터셋 이미지로 조회: image()


(3) 데이터셋 기술통계: summary()]



3. 데이터셋 시각화


(1) 빈도수 시각화: itemFrequency() / barplot() / itemFrequencyPlot()


(2) 히트맵: crossTable() / gplots::heatmap.2() / gplots::heatmap() / d3heatmap::d3heatmap()


Error in plot.new() : figure margins too large -> par(mar=c(1,1,1,1)) Error in .External.graphics(C_layout, num.rows, num.cols, mat, as.integer(num.figures), : invalid graphics state -> dev.off()



4. 연관분석(장바구니 분석): arules


(1) apriori(): supp = , conf =


● association 연관분석 찾되, priori 확률적으로 높은 것부터 우선순위.

● 머신러닝할 때 parameter 옵션 사용.

supp: support / conf: confidence

supp: 지지도. 이 규칙이 다른 규칙에 비해 동시 구매될 가능성 높은 것이라고 지지할만한지를 표현. (전체 transaction 개수 중에 x -> y 인 규칙 세어서 찾는게 옵션의 기본 수학 로직 / P(A교B)/n ) 적어도 전체 transaction 중에서 10%정도는 등장해야 기본적으로 규칙이라고 정할만하지 않은지 설정.

conf: 신뢰도. (x가 존재하는 transaction일 경우, x -> y인 규칙 세어서 찾는게 수학 로직. 조건부확률 / 모수가 x이며, x가 있는 경우 y를 산다면 이건 더이상 우연히 두 개를 겹쳐서 사는 게 아닐 거라는 판단으로 만든 로직 / P(A교B)/P(A))

이질적인 두 데이터 묶어줬기 때문에 c 대신 list 사용.

parameter의 허들 조건, 즉 규칙을 찾는 조건을 어떻게 설정하느냐에 따라 규칙의 개수는 유동적.

규칙이 너무 많으면 supp 값을 조금씩 높이면 된다.

(2) 분석 결과 조회: summary()


● 82개 규칙이 추출되었다고 나옴.

1개 짜리(A만 산다) 규칙 7개 / 2개 짜리 (1대1 규칙. A사면 B산다) 규칙 20개 / 3개 짜리 (A와 B 사면 C산다) 규칙 30, 6개짜리는 parameter 설정에 넣지 않았기 때문에 찾이 않음.

(3) 분석 결과 조회: inspect()


● 1번부터 7번 규칙까지는 1개 짜리 규칙인 7개 아이템 보여주는 것.

● 8번 규칙 ~ 27번 규칙까지가 1대1규칙. (여기부터 book과 appliance는 없다는 걸알 수 있음.)

● 28 규칙 ~ 57 규칙까지 2대1규칙.

● 규칙이 많다고 좋은 것 아니며, 이미 하고 있는 규칙이 포함될 수도 있고, 경영진에게 논리적으로 설명해 예산승인을 받아낼 있는 규칙을 찾는 게 의미 있는 일.

● appliance의 경우 support 보면 10%의 확률

● food의 경우, 150번 중 105번 구매했기 때문에 70% 정도의 확률 가지고 있다는 걸 알 수 있음.

● 8규칙부터가 우리가 찾던 규칙. 33개 나온 규칙도 있고, 54개 정도 나온 좋은 규칙도 있으며 67개 나온 규칙도 있다. 이건 kitchen살 때 food 사는 경우의 수이며 44퍼로 지지도가 높은 걸 볼 수 있다.

● support 값이 높은 친구가 확률적으로 반응을 보일 가능성이 높다.

● lift: 향상도 (P(A교B)/P(A) x P(B) / supp와 conf를 응용한 값)

● lift 값이 1보다 크면 같이 살 확률이 높은 것이고 1보다 작으면 서로 독립적으로 살 확률이 높은 것.

● 이것도 일종의 데이터프레임이니, lift 기준으로 내림차순 정리하면 규칙 찾는데 용이할 것.

● 여긴 sequence의 개념, 즉 시차의 개념은 없다. 뭘 사고 난 후 뭘 사는지는 알 수 없다.

● 연관분석은 수학식이 몹시 간단하다. 얘만!


(4) 연관성 규칙의 특정 부분 지정해 호출: 1대1 규칙 확인 등


(5) 부분일치 & 완전일치 키워드 지정조회: %pin% / %ain%


(6) 특정 품목 기준으로 규칙 조회: rhs = , lhs =


(7) 지지도, 신뢰도 기준으로 규칙 조회: supp = , conf =


(8) 규칙 시각화: arulesViz::plot()



일종의 매트릭스 그래프
네트워크 그래프

5. 분석된 규칙 하드디스크에 저장: arules::write()



추가. 워드클라우드로 데이터 조회: RColorBrewer, wordcloud


(1) 색깔 준비 & 단어 준비: RColorBrewer::brewer.pal, itemLabels()


(2) 워드클라우드: wordcloud()



<참고>


comments powered by Disqus