이번 포스트에서는 현재 일하고 있는 Who’s Good에서 웹어플리케이션 기반의 간단한 툴을 개발한 과정을 기술합니다. 자세한 사내 업무 내용은 생략하며, 유사한 상황 및 시나리오로 대체했음을 밝힙니다.

 

1. Quality Check (QC)

현재 일하고 있는 Who’s Good에서는 뉴스 기사를 기반으로 기업의 *ESG 리스크를 평가합니다. 모델을 통해 산출된 결과에 대해서는 꼭 검토 및 검증 프로세스를 거치는데요, 산출된 결과값이 정답인지 아닌지 여부를 확인하는 과정이고, Quality Check 또는 줄여서 QC라고 합니다. 주로 ESG 도메인의 전문가인 ESG 리서쳐 또는 QC 스태프가 이 과업을 수행합니다.

(*ESG : Environment, Social, Governance 기업의 환경, 사회, 지배구조)

1.1. 기존의 QC과정

기존의 QC과정에서는 (1)FTP서버를 통해 모형의 결과를 다운 받아 (2)구글 스프레드시트에서 QC를 진행하고 (3)이를 개발자 또는 DB관리자에 전달하여 DB에 업로드 되게끔 하는 과정을 거쳤습니다. 이 과정을 간단히 아래의 이미지와 같이 간단히 도식화 해보았습니다.

1.2. QC과정의 불편한 부분

현재 QC 작업은 불가피하게도 ESG 도메인을 가진 전문가가 수행해야 하고, 데이터의 퀄리티를 유지하기 위해 절대 생략할 수 없는 과정입니다. 하지만 옆에서 제가 관찰한 바로는 기존의 QC 과정에서 몇 가지 불편한 점과 개선할 수 있는 부분들이 분명히 보였습니다.

  1. 파일질라(Filezilla) 같은 프로그램으로 FTP서버에 접속하여 QC 템플릿을 다운 받는 것이 불편함.
  2. 앞서 기술한 바와 같이 뉴스기사를 통해 기업을 분석하기 때문에 기업 관련 기사 발생량에 따라 QC 작업에 걸리는 시간이 매우 다를 수 있음. 따라서, 완료된 QC 결과를 전달하는 시간이 일정하지 못했고, 이에 개발자 또는 DB관리자가 불규칙하게 일일이 대응해야함.
  3. QC하는 과정에서 데이터를 수정하거나, 결과를 기입하는 과정에 실수가 발생할 수 있음. 따라서 DB입력 과정에서 에러가 발생하거나, 입력 후 추후 데이터 퀄리티 면에서 문제가 이어지는 등, 불확실한 상황이 이어짐.

물론 이러한 불편한 점들에 대한 피드백과, QC스태프들이 편리하게 사용할 수 있는 QC툴에 대한 니즈가 많았습니다. 하지만 프로젝트의 우선순위(항상 외부를 대응 하는 일들이 더 급하고 중요해서 내부가 밀려나가는 상황)와 개발팀의 일정이 있어, 이러한 부분의 개선이 빠른 시일 내에 이루어질 것 같아 보이진 않았죠 …

 

2. 그래도 이 상태로 계속 갈 수는 없으니까

2.1. 최소한의 요구사항

그래도 제가 도울 수 있는 점이 있지 않을까 싶어, QC툴에 대해 팀원들로부터 의견을 취합해보았고, 수많은 희망사항들을 거르고 걸러서 아래와 같이 의견을 좁혀봤습니다.

  1. QC템플릿을 다운로드하는 과정이 더 간편했졌으면 좋겠다.
  2. QC는 아직 엑셀로 하는게 편하다. 엑셀을 이길 수 있는 걸 가져올 생각이 아니라면 쉽게 생각하지 않는게 좋을 거야 찡끗
  3. QC 결과에 대한 검증이 자동으로 이루어졌으면 좋겠다.
  4. QC 결과에 오류가 있다면 업로드가 되지 말아야 한다.
  5. 직접 업로드하는 과정이 간편하면 좋다.

2.2. 그러면 Streamlit 을 써보자

저는 개발자는 아닙니다…만, 제가 애용하는 Streamlit을 활용하면 QC툴의 니즈를 어느 정도 충족할 수 있는 툴을 만들 수 있을 것 같았습니다.

 

Streamlit은 간단하게 ML/DL 어플리케이션을 구현하고 프로토타입을 만들 수 있는 파이썬 기반의 웹어플리케이션 프레임워크로, 2019년 하반기 등장 이후 아주 빠른 속도로 성장하고 있습니다.

Streamlit은 아주 다양한 기능을 제공하고 있어, ML/DL 관련의 프로토타이핑이라는 기존의 목적 이외에도 더 다양한 용도로 활용 가능합니다. 저 같이 웹 개발에 대한 지식이 전무하고 없고 파이썬 하나만 알고 있더라도, (Django나 Flask를 알지 못 해도) 웹 어플리케이션을 만들 수 있습니다.

Streamlit이 제공하는 다양한 기능은 Streamlit 소개 글 (클릭)를 참고해주세요.

2.3. 이렇게 개선해볼 수 있지 않을까

Streamlit을 통해 (1) QC파일 다운로드 (2) QC 결과 검증 (3) QC 파일 업로드 기능을 가진 웹어플리케이션을 개발하고, 슬랙 알림과 DB저장 등의 과정을 스케줄링하는 부분은 Airflow를 통해 구축하기로 했습니다. (이 포스트에서 Airflow에 대한 자세한 내용은 생략하도록 하겠습니다.)

 

3. 완성된 QC 툴의 예시

완성된 QC툴은 실제 업무 내용이 많이 포함되어 그대로 기술하기에는 어려운 점이 많기 때문에 이 포스트에서는 매우 유사한 형태와 기능을 하는 예제로 대체 했습니다.

아래 QC툴은 영화 댓글 감성분석 모델의 결과를 검토 및 검증하는 가상의 QC 과정을 수행합니다. 이 툴에서 활용한 데이터는 네이버 영화 댓글 데이터를 가공하여 만든 가상의 데이터(fake data)입니다.

 

QC스태프, 사용자는 QC툴을 활용하여 아래의 과정을 수행합니다.

  1. 영화 댓글의 긍정/부정 감성분석 결과를 QC 템플릿으로 다운로드
  2. 각 산출 결과에 대해 ACCEPT/REJECT 을 입력하여 QC 작업을 수행
  3. 결과를 업로드

 

그럼 툴을 한번 살펴보도록 하겠습니다. (전체 소스코드는 github에서 확인할 수 있습니다.)

3.1. 메인 & QC 가이드라인 페이지

사용자는 간단한 인증 기능을 통해 툴을 활성화 시키고, QC작업을 수행하기에 앞서 QC 가이드라인과 주의사항 등을 확인할 수 있습니다.

3.2. QC 템플릿 다운로드 페이지

날짜를 설정하고, 해당 날짜의 데이터에 대한 QC 템플릿을 생성합니다. 사용자는 링크를 클릭해서 QC 템플릿 파일을 다운로드 할 수 있습니다.

 

각 데이터에 대해 감성분석 모델이 1(긍정) , 0(부정)으로 분류한 결과를 검토하는 QC 템플릿 파일입니다. 사용자는 QC 템플릿 파일 내 qc_result 칼럼에 ACCEPT/REJECT를 입력하며 QC 작업을 수행합니다.

3.3. QC 템플릿 업로드 페이지

업로드 페이지에서 사용자는 QC 완료 파일을 업로드 합니다. 이 과정에서는 .xlsx 확장자인 파일만 올릴 수 있도록 하고, 업로드 파일명이 다른 형태를 띄고 있다면 업로드를 제한하는 기능을 포함하고 있습니다.

그리고 qc_result 컬럼에 기입하지 않은 blank cell이 있는지, ACCEPT/REJECT 이 아닌 다른 값이 입력되진 않았는지 검증 작업을 거쳐 QC Result Validity Test를 통해 사용자에게 패스 여부를 알려줍니다. 검증 작업을 패스하지 못 한다면, 파일을 업로드할 수 없습니다.

 

마지막으로 사용자는 QC 완료 결과를 다시 한번 검토할 수 있으며, 몇 가지 셀프 체크와 파일을 업로드 하는 본인이 누구인지 선택한 후, QC 완료 파일을 업로드할 수 있습니다.

 

4. 후기

이런 식으로 개발한 QC툴은 현재도 사내에서 사용 중에 있습니다. 이 대신 잇몸이라는 말처럼, 정식으로 개발한 툴은 아니지만, 불편했던 점을 어느 정도 해소하고, 리소스와 시간을 절약할 수 있게 된 부분이 가장 큰 추후 제대로된 QC툴이나 시스템을 구축할 때 개발팀에서 참조할 수 있는 프로토타입의 역할도 하고 있습니다.

언뜻 보면 간단한 것들도 실제로 개발하고 구현하려면, 밑바닥에서부터 새로 배워야 하는 것들이 많아서 예전에는 엄두가 안 났었습니다만, Streamlit이 아주 간편해서 앞으로도 급하게 프로토타이핑을 할 때 자주 사용할 것 같습니다. 빛과소금 또트림릿

5.Source code

6.Reference