텍스트마이닝 기업 적용 사례 (다면진단 주관식 응답 분석)

1년 전에 국내 모 대기업 지주사에서 그룹 차원(전 계열사 포함)으로 ‘리더십 다면진단’ 설문조사를 실시했는데, 그 주관식 응답 텍스트 분석 프로젝트를 한 경험이 있다. 나로서는 처음으로 HR Analytics 프로젝트를 온전히 경험할 수 있는 의미있는 기회였기에 블로그에 간략히 남겨본다.

다면진단이라 하면 어떤 대상자(주로 관리자)에 대해 그 사람 본인, 그 사람의 상사 및 부하직원들의 평가까지 모두 수집하는 방식을 의미한다. 더 나아가면 고객에게 평가를 요청하는 경우도 있는데… 아무튼.

평가의 대상이 되는 관리자는 약 2천 명이었고, 상사, 본인, 부하직원들로부터 응답을 받았으며, 총 응답 건수는 약 1만6천 명이었다. 본인 1건, 상사 1건, 부하직원 6건(평균) 정도의 응답을 수집한 셈이었다.

객관식 문항과 주관식 문항이 혼합되어 있었는데 여기서는 주관식 문항에 대한 응답 결과만 분석한 내용을 소개한다.


프로젝트의 목표

지주사에서는 1만6천 건의 응답 내용을 일일이 다 확인할 수 없으니, 대략 어떤 내용이 나왔는지 분류(classification)를 해달라는 거였다. 예를 들면 “이 응답은 ‘업계 전문성’ 관련 내용이다, 이 내용은 ‘회의 문화 관련 내용’이다” 하는 식으로 자동으로 분류한 후, 집단별로(회사, 직군, 성별, 성과 등을 기준으로) 비교 분석 하는 것까지가 이 프로젝트 범위였다.

어쨌든 주관식 문항은 아래와 같았다. (다른 문항도 있었는데, 어쨌든 정보 보호 차원에서 축소/각색했다.)

  1. A(평가 대상자)에게 앞으로 기대하는 점은 무엇인가요?
  2. A(평가 대상자)가 앞으로 줄여나가길 바라는 점이 있다면 무엇인가요?

애초에 나는 문항 설계 과정에는 전혀 참여하지 못했다. 그리고 다면진단의 전체 프레임이나 객관식 문항도 고객사에서 온전히 전달받지 못했다. 객관식 응답이랑 이 분석해야 더 의미있는 결과가 나왔겠지만 애초에 이 프로젝트는 주관식 응답에 한했다. 결과적으로 이게 이 프로젝트에서 가장 아쉬운 부분이다.

날 괴롭혔던 이슈들

아래와 같은 이슈들이 있었다.

  • 응답의 길이 통제되지 않음
  • 무성의 응답 다수 (예: “………”, “12345”, “ㅇㅇㅇㅇㅇ”)
  • 무의미 응답 다수 (예: “늘 신경 써주셔서 감사합니다”, “생각해보겠습니다”, “지금처럼만 해주세요”)
  • 여러 내용을 담은 복합적 응답 (예: “항상 열정적인 태도를 가지고, 구성원들과 소통하며, 신속하게 의사결정하기”)

그 외에도 맞춤법, 형태소 분석기에 미등록된 어휘 사용, 유사어 혼용, 영어 사용 등 짜잘짜잘한 문제들이 성가시기도 했다. 텍스트 마이닝 프로젝트는 처음이었는데, 역시 만만치 않다는 걸 깨달았다. 현실은 역시 녹록치 않았다. 그래도 어쨌든 이런 건 분석가가 해결해야 할 문제니까.

작업 환경 및 분석 도구

일단 대부분의 작업은 파이썬으로 했다. 이거밖에 할 줄 몰라서. 주로 사용한 라이브러리는 Konlpy(한국어 형태소 분석), scikit-learn(기계학습 알고리즘), matplotlib(데이터 시각화) 정도가 전부였다. gensim으로 나름 토픽모델링도 해보고 했는데 결과가 여러모로 잘 안 나왔다.

계속 결과를 눈으로 확인하면서 반복 시행을 해야 해서 Jupyter Notebook의 도움도 컸다.

분석 단계

일단 사전에 분류(classification) 모델이라는 게 없었다는 사실이 가장 큰 문제였다. 이 말인 즉슨 기계의 힘을 빌려 바로 분류를 기대하는 건 어렵다는 얘기다. 그래서 일단 군집화(clustering)을 통해 비슷한 응답끼리 모아놓은 후에 거기에 이름을 붙이는 방식(labeling)으로 진행했다.

n회 반복… 저기에 들어간 내 피, 땀, 눈물…

분석 1. 어휘 빈도 분석

어휘 빈도 분석은 매우 단순한 접근이지만 그래도 이 문항에서 어떤 표현들이 주로 나오는지 쓱 훑어볼 수 있는 탐색적 분석이다.

어떤 단어들이 나왔나 상위 15개만 살펴보자. (몇가지 품사들은 제외 했다.)

대충 어떤 어휘가 나오는지 보인다. 첫 질문은 긍정적인 내용, 두번째 질문은 부정적인 내용으로 많이 응답한 걸 알 수 있다.

워드 클라우드도 한 번 그려봤다.

1. 앞으로 기대하는 점

2. 앞으로 줄여나가길 바라는 점

워드 클라우드를 그냥 일종의 보여주기, 디자인 수준으로 여기고 무시하는 사람들도 있는 거 같긴 하던데, 그래도 표에 적힌 숫자보면서 눈 아프게 비교하는 것보다는 이렇게 한 방에 어떤 인상을 각인시키는 게 더 효과적인 방법일 때도 있다. (맞다. 그냥 심심해서 그려본 거다. 솔직히 별 활용도 없음.)

참고로 워드 클라우드를 그릴 때 그냥 빈도 값으로 그리면 크기 차이가 너무 많이 나기 때문에, 빈도를 평탄화 하기 위해 로그 함수를 적용했다.

이후에는 어휘 동시출현(co-occurrence) 빈도를 계산한 행렬을 만들고 네트워크 분석을 해보기도 했으나 조금 복잡하니 여기서는 생략한다.

분석 2. 응답 분류 및 빈도 분석

실제로 내가 해야 할 일은 이거였다. 이 응답이 어떤 범주에 속하는지 분류하고, 그 빈도를 보는 것. 앞에서 언급한 것처럼 분류는 현실적으로 불가능하니 일단 군집화를 한 후 레이블을 붙이는 방식으로 접근했다.

군집화 분석을 몇 번을 돌려봤는지 모른다. 어쨌든 K-means 클러스터링이 제일 결과가 괜찮았고, 여러번 반복시행을 해서 공통적으로 묶이는 응답들에 일단 가안으로 이름을 붙였다.

클러스터의 개수를 정하는 과정에서는 고객사와 협의를 했다. (이런 프로젝트는 일단 분석 결과를 계속 투명하게 보여주면서 이슈를 협의해가는 과정이 중요한 것 같다.) 아무튼 결과적으로 1번 문항에 대해서는 35개, 2번 문항에 대해서는 33개의 세분류를 짰다. 개인적으로는 10~20개 안으로 줄여야 될 거 같았는데 결국 고객사에서 합의한 최소 분류 개수가 여기까지였다. 물론 최대한 세세하게 보고 분류하고 싶은 게 사람의 욕심이겠으나 “이건 이거랑 분명 다른 내용인데?” 하는 의문에 빠지면 분류는 끝이 없다. 이렇게 개수를 늘리면 직관적인 패턴이 안 보여서 전체 결과에서 인사이트를 뽑는 데에는 한계가 생긴다.

어쨌든 상위 15개에 대해서만 차트를 후딱 그려보면 아래와 같은 결과가 나왔다.

1. 앞으로 기대하는 점

구성원들과의 소통 방식에 대해 기대하는 내용이 가장 많았다.

2. 앞으로 줄여나가길 바라는 점

비효율에 대한 내용이 압도적이었고,
이어서 구성원을 무시하는 내용들이 등장한다.

그러나 분류가 너무 많아서 결국 아래와 같이 세분류들을 묶었다.

  • BIZ / WORK (사업, 업무 관련)
    • Plan (계획)
    • Do (실행)
    • See (점검, 평가, 피드백)
  • PEOPLE (사람 및 조직 관련)
    • 구성원 관리
    • 조직 관리
    • 자기 관리

그리고 다시 분포를 그려보니 (이번엔 파이차트로 후딱 그려봤다.)

기대하는 점에서는 People 영역이 더 많이 등장한다. 세부적으로 보면 구성원이나 조직 관리에 대한 내용에 대한 기대가 많다. 반면, 줄여나가길 바라는 점에서는 BIZ/WORK 영역이 더 많이 언급되는 걸 볼 수 있다. 특히 업무 실행(Do) 관리와 관련한 부분에서 줄였으면 하는 점을 많이 언급했다. 아, 그리고 자기 관리에 대한 내용도 많이 등장했다.

참고로 ‘meaningless’는 무의미, 무성의 응답이다. 두번째 문항에 대해 meaningless 응답이 많은 이유는 혹시라도 자신이 어떻게 응답했는지 상사에게 공개될 것에 대한 우려 때문에 부하직원들이 자신의 상사에 대해 부정적인 피드백을 하기 꺼려서 그런 것으로 볼 수 있다. 어쩔 수 없다. 조직 내에서 설문조사를 할 때 응답 내용에 대한 비밀 보장을 명시하고 그것을 철저히 준수해서 계속 설문 문화를 개선하는 수밖에 없다.

분석 3. 집단별 비교 분석

이제 회사, 직군, 성별, 성과 등을 기준으로 집단을 세세하게 분류하여 이 분포를 다시 보고 인사이트를 도출하는 과정을 통해 최종 분석이 들어간다.

사실 이게 핵심이긴 하지만 이 글에서는 생략한다. 고객사 정보 보호 차원에서도 그렇고, 결과가 너무 세세하고 많아서.

분석 4. 분류 실험 및 분류기 성능 테스트

이건 프로젝트 범위에 포함된 내용은 아니었지만, 기왕 응답에 대한 레이블이 다 붙었으니 이제 직접 기계에게 학습을 시켜서 알아서 분류를 할 수 있는지 확인하는 절차였다. 이렇게 한 번 분류기를 만들어 놓으면 앞으로 진행되는 건들은 기계를 통해 자동으로 응답을 분류하고, 분류 정확도를 계속 높여 갈 수 있을 거다.

어쨌든 정확도를 확인하고 싶었다. 그래서 실제 정답을 얼마나 잘 맞추는지 알아보기 위해 각 응답의 실제 정답과 기계가 맞춘 정답 예측율을 가지고 혼동 행렬(confuxion matrix)을 그려보기도 했다.

앞으로 기대하는 점
정확도 71%
앞으로 줄여나가길 바라는 점
정확도 72%

분류 정확도가 썩 만족스럽지 않은 건 한 응답이 복합적인 내용을 담고 있는 경우가 많았기 때문이라고 생각한다. 실제로 기계가 분류해준 내용을 육안으로 확인해보면 미리 정답이라고 매겨놓은 값이랑은 다르지만 그래도 꽤 수긍이 가는 내용이 많았다. 왜 그렇게 분류했는지 끄덕끄덕 할 수 있는 수준은 되더라.

그리고 애초에 개수가 상대적으로 많이 부족한 레이블들이 있었기도 하다. 물론 이런 레이블은 제거하고 많이 나온 레이블만 추려서 다시 따로 돌려보거나 하면 훨씬 결과가 좋아졌을 거다. 게다가 응답의 길이나 이런 것까지 통제해서 아웃라이어들을 제거한다든가 이런 식으로 하면 당연히 더 좋아질 수 있을 거다. 거기까지 더 진행해보진 않고 일단 이 정도로 확인만 했다.

앞으로는 응답을 받을 때 복합적인 내용을 쓰지 않도록, 혹은 여러개를 써야 할 경우 작성란을 분리하는 등의 방법을 통해 잘 통제하면 훨씬 분류 정확도가 좋아질 것으로 보인다.

예를 들면 이렇게.

설문 응답자에게 좋은 응답을 받으려면
사용자 경험(UX)의 관점에서
효과적인 방법을 찾아야 한다.

어쨌든 프로젝트는 무사히 마무리 되었다. 처음 해보는 텍스트 마이닝 프로젝트였고, 아예 혼자 진행한 거였는데 다행히 무사히 결과를 내긴 했으니 그것만으로도 감사해야겠지.

개선사항 제안 / 추후 과제

고객사도 이런 시도는 처음이었고, 나도 처음 진행해본 텍스트 마이닝 프로젝트다 보니 조금씩 아쉬운 부분들이 있었다. 다음번에 진행한다면 개선해야 할 점, 더 좋은 분석 결과와 인사이트를 얻기 위해 고려할 점을 요약해보면 이런 내용이 될 것 같다.

  • 설문 설계 시 문항 타당성 검토 (좋은 문항을 던질수록 더 의미있는 응답을 수집할 수 있다.)
  • 효과적 응답 수집을 위해 다양한 대안 고려 (무의미, 무성의 응답을 배제하기 위해 응답 필수가 아닌 선택으로 바꿀 수도 있고, 복합적 내용을 한 곳에 작성하지 않도록 항목을 구분해서 입력하는 란을 만들어볼 수도 있을 것이다. 글자수를 통제할 수도 있다.)
  • 정량적 데이터와의 통합 분석을 통한 인사이트 도출 (당연한 얘기다. 수집된 모든 데이터는 어찌됐든 종합적으로, 다각도에서 확인하고 해석해야 한다. 그래야 상식적인 설명이 가능해진다.)
  • 분석 프레임의 정교화 (애초에 응답을 분류하는 프레임이 명확하지 않았기 때문에 인사이트를 보는 데에 한계가 있었다.)

그리고 이렇게 매년 진행하는 대규모 서베이 말고도 펄스 서베이(Pulse Survey)라고 해서 수시로 피드백을 받을 수도 있고, 익명 게시판 같은 곳을 통해 직원들의 주요 이슈나 정서(?)를 확인할 수도 있을 거다.

출처: Bersin, Deloitte Consulting LLP, 2017.

HR Analytics 프로젝트 기회가
많이 생겼으면 좋겠다.

다음엔 더 잘해야지…

추천 글

“텍스트마이닝 기업 적용 사례 (다면진단 주관식 응답 분석)”의 1개의 댓글

  1. 핑백: 텍스트마이닝 기업 적용 사례 (다면진단 주관식 응답 분석) 2탄 - 아무튼 워라밸

댓글 남기기