<레터 타르트> 타르트로 문장 만들기.
이제 화장품 고객들이 남긴 리뷰를 분석해보자.
먼저 단어 분포를 살펴보고, 마지막엔 리뷰 긍정/부정 예측 모델을 만들어볼 계획이다.
전체 데이터를 불러온 후 그 중 2,000개의 문장을 불러왔다.
이제 이 문장들을 형태소 분석 후 학습하게 할 것이다.
파이썬에서 nltk 라이브러리를 이용하면 형태소 분석이 가능하다.
형태소 분석이 된 토큰 전체 갯수는 84,600개이고, 중복을 제외한 토큰 수는 9,183개이다.
이 토큰 데이터들을 바탕으로 리뷰 긍정, 부정 모델이 만들어지게 된다.
일단 빈출 단어 상위 100개 단어를 살펴보면 위와 같다.
그런데 살펴보면 stop words(불용어)가 많이 들어가 있는 것을 알 수 있다.
이 불용어 들을 제거한 후에 다시 빈출 단어 상위 50개를 살펴보면 아래처럼 된다.
주요 단어들을 바탕으로 소비자 니즈를 살펴보면,
1. 느낌 : 소비자들은 느낌을 중요하게 생각한다.
2. 무난 : 소비자들은 무난한 제품을 나쁘지 않게 생각한다.
3. 트러블 : 소비자들은 피부 트러블에 관심이 많다.
4. 여드름 : 여드름에 대해서도 언급을 많이 하는 편이다.
5. 향 : 향은 product에 중요한 요소 중 하나이다.
6. 여름, 겨울 : 사용자들은 계절성으로 product에 involve된다.
7. 수분, 보습 : 로션 제품에서 수분은 매우 중요하다. 이를 유지하는 보습에 대한 것도 중요하다.
8. 하고 : 로션 사용시 단지 로션만 사용하지 않고, 다른 제품과 연계해서 사용한다.
이렇게 단어들을 살펴보는 의의는 2가지가 있다.
첫째 기존에 알던 것을 다시 발견하는 것. 이것이 중요한 이유는 소비자 트렌드가 변했는지 아니면 계속 유지되는지 변화를 감지할 수 있기 때문이다. 기존에 중요하다고 생각했던 부분이 어느 순간 변했을지 모르는 법이다.
기존 로션에 대해 알았던 부분은 향, 느낌을 중요시 한다는 것이다. 그리고 로션만 사용하지 않고 보통 스킨, 크림 등과 로션을 함께 사용한다. 트러블에도 고민을 많이 한다는 것도 이미 알던 부분이다.
두번째는 예전에 몰랐던 새로운 소비자의 니즈를 파악하는 것이다.
로션을 사용할 때 생각보다 무난한 부분에 신경쓴다. 소비자들이 로션에 바라는 부분은 얼굴에 수분을 공급하고 보습을 유지하는 무난함이다. 즉 로션은 너무 튀면 안된다.
또한 여름, 겨울 등 시즌에 따라 로션에 대한 느낌이 달라진다. 피부에 당기고, 여름에 늘어지는 피부 역학이 적용되는 것이다. 여름, 겨울에 맞춰진 제품을 출시하거나 프로모션시 계절성에 맞춰진 전략을 취하는 것도 방법이 될 것 같다.
워드 클라우드도 한번 만들어보자.
자 이제 리뷰로 만든 단어 토큰들로 소비자 리뷰 긍정/부정 예측 모델을 만들어보자.
1~5점 척도로 평점이 구성되어 있는데, 학습시키기 위해서 긍정/부정 구간을 정의해주어야 한다.
이전 탐색적 데이터 분석 때 살펴보았듯이 1~2점은 별로 없다. 그래서 3점도 부정으로 보고 학습시키는 것이 데이터 벨런스에 적합하다. 1~3점을 부정으로, 4~5점은 긍정으로 if문을 걸어주었다.
그리고 형태소 분석 함수에는 Okt(구 tweeter)라이브러리를 사용하였다.
한글 형태소 분석 라이브러리 중 Okt 라이브러리가 가장 사용성과 이해성이 좋아서 사용했다.
리뷰 데이터 중 rating과 content는 리스트로 만든 후 train, test 데이터로 나눠주었다.
다른 모델에서는 보통 7:3 데이터로 나눠주었는데, 이 리뷰 데이터는 데이터 양이 많지 않았다. 그래서 학습 데이터를 80%로 좀 더 높게 비율을 높여주었다.
학습 후 pickle을 이용해서 모델을 저장한다.
학습에 사용된 알고리즘은 크게 2가지이다.
1. Logistic Regression
- 긍정/부정 classification을 위해 필요하다.
2. TFIDF
- 단어가 어떤 문서에 얼마나 들어있는지에 따라 문서의 특성을 규정해주는 알고리즘이다.
- TF는 단어가 많을수록 가중치를 높여주는 알고리즘이고, IDF는 문서에 특정 단어가 희소할수록 그 문서의 특성을 규정해주는 알고리즘이다.
- 요약하면 TFxIDF는 특정 문서에 희소한 단어가 많을수록 그 문서가 어떤 특성인지 판단이 가능하다.
-> TFIDF로 특정 문서에 대한 특성을 예측하고, Logistic 알고리즘을 이용해서 리뷰가 긍정인지 부정인지 분류해주는 것이다.
앞서 저장해둔 모델을 불러와서 소비자가 리뷰를 작성하면 sentiment를 예측해주게 된다.
자 이제 필요한 함수들은 다 정의가 되었다. 이제는 위에서 정의한 함수들을 차례로 실행하고 소비자의 데이터를 input으로 받아서 예측해보자.
학습 함수를 실행시켜보니, 정확도는 78%로 나타났다.
그리고 학습 모델이 저장되었다.
테스트로 10개의 소비자 리뷰를 넣어보니 10개 다 긍정/부정 예측에 성공했다!
이 모델을 사용하면 소비자 리뷰 감성분석이 가능하다.
비즈니스적으로 사용방법을 살펴보면,
보통 제품 평가할 때 1~5점 척도로 판단한다 근데 상당수가 4~5점에 몰려있다.
그래서 제품 평가할 때 리뷰 감성분석을 추가하면 어떨까. 리뷰 감성분석 점수를 추가해서 좀 더 세분화된 제품 평가가 가능하다.
또한 제품별 자주 언급된 키워드 파악이 가능하다. 예를 들어 여름, 겨울과 같은 시즌에 대한 키워드가 많이 언급된 제품이라면 프로모션 전략에 시즌성을 추가하면 좋을 것 같다.
한글 자연어처리를 할 때 다음과 2가지가 중요한 포인트라 생각이 들었다. 이것들을 만족시켜주지 않으면 파이써 코드를 실행할 때 에러가 난다. 아마도 학습할 때 이모티콘이 메모리를 많이 할당하게 되어 out of working이 일어나는 것 같다.
(1) 이모티콘
- 이모티콘은 주로 문장 맨 끝에 있다.
- 파이썬 코드로 이모티콘을 지워보려 했는데 없어지는 케이스도 있고, 안 없어지는 케이스도 있다. 그리고 특정 단어와 함께 붙어있으면 그 단어와 함께 제거되는 경우도 있다.
그래서 일일히 리뷰를 들여다보면서 이모티콘 제거 작업을 진행했다. 이것은 띄어쓰기를 안하는 리뷰를 전처리할 때 특히 필요한 작업이었다
- 이모티콘은 아래와같이 ".단어."로 교체해주었다.
♥ -> .하트.
(2) 오타 수정(한글 형태 파괴 주범들)
아래와 같이 한글을 변형해서 또는 오타로 이뤄진 리뷰들을 전처리가 필요하다.
- 기름기 좌ㄹ좌ㄹ -> 기름기 좔좔
- 와우 피부인지 사막인지 앍ㅎ챠냗ㅃㄴㄹ호갸늌 -> 삭제
- 띄어쓰기 무시 : 샘플 받아서쓰고있는데뭐랄까은근겉도는느낌이랄까요시간좀지나면흡수되긴하는데엄청촉촉한것두아니고 -> 띄어쓰기화!
<결론>
한글 전처리를 해보니, 한글은 영어와는 많은 부분이 다른 것을 알 수 있었다.
IMDB 영화 리뷰를 분석할 때는 이모티콘, 띄어쓰기는 큰 문제가 되지 않았었다. 하지만 화장품 한글 리뷰는 이모티콘이 많고, 띄어쓰기가 잘 안되는 특성이 있었다. 영어같은 경우는 띄어쓰기를 하지 않으면 문장 이해가 되지 않지만 한글은 띄어쓰기를 하지 않아도 문맥 이해가 가능하기 때문이라 판단된다.
리뷰 데이터 분석을 바탕으로 소비자 니즈를 파악하는 것은 상당한 도움이 될 것 같다. 특히 위에서 살펴본 빈출 단어들을 바탕으로 소비자 트렌드를 파악하면 신제품 기획 및 프로모션, 캠페인 기획에 많은 도움이 될 거라는 생각이 들었다.