삼성SDS Brightics

[삼성SDS Brightics] 개인분석미션 3-10. 최종화 수정 : 중소기업 채용 트렌드, Brightics로 예측하기 (feat. ARIMA💙)

해붕 2021. 11. 7. 21:30
반응형

안녕하세요~!

Brightics 서포터즈 2기 정해웅입니다 💙

안돌아올 줄 알았는데,, 생각보다 빨리 돌아왔죠?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅎ헤헷

제가 분석했던 최종화 모델링 과정에서 문제가 있었고

감사하게도 저희 멘토님께서 캐치하고 알려주셔서 이를 바로 잡기 위해 왔습니다.

사실 저도 ARIMA라는 시계열 모형을 쓰면서 데이터셋 자체가

시계열로 보았을 때는 크기가 매우 작은 편에 속하여 모델링 과정에서 애를 먹었었는데요.

또한, 기존 데이터셋은 2020년 12월까지의 데이터만을 포함하고 있었고

현재 시점에서의 자료를 추가하기 위해 제가 2021년 9월과 10월 데이터를 추가했었죠?

이러다 보니 시계열 모형에서는

2018년 9월

2018년 10월

...

2020년 12월

2021년 9월

2021년 10월

이렇게 2020년 12월에서 2021년 9월로 바로 뛰어넘은 것을 볼 수 있습니다.

먼저, 제 모델링 과정에서 문제점부터 자세하게 파악하고 이를 어떻게 해결했는지 알아보겠습니다.


1. 최종화 모델링 과정에서 문제점들

제가 최종화 데이터셋을 모델링 하는 과정에서 발생한 문제점들부터 하나하나 살펴보겠습니다. 😊

가장 먼저,,! 앞서 말한 것과 같이

2020년 12월 데이터에서 바로 2021년 9월과 10월로 뛰어넘었다는 것이였습니다.

제가 분석할 당시만 해도 크게 문제가 될 것이라고 생각은 안 했지만,

멘토님께서 이러한 결측은 시계열 모델링 과정에서 크리티컬한 문제가 생긴다고 말씀해주셨습니다.

시계열 모델에서는 일련의 과정 (202011->202012->202109->202110)을 동일한 시점으로 인식하기 때문입니다.

즉, (202011->202012->202101->202102) 로 인식한다는 것인데요.

이를 해결하기 위해 여러 가지 아이디어를 생각해봤습니다.

분기 별로 데이터를 쪼개는 방법을 먼저 생각해보면

이렇게 된다면 2021년 전반기에서 또 한 번 결측이 발생하기에 문제가 될 것으로 생각했습니다.

따라서 시계열 모델을 위해서 2021년 데이터를 아예 빼는 방법을 택했습니다.


두번째 문제는 바로 기존 데이터셋에서 결측이 발생한 달이 있었다는 것입니다.

사진으로 살펴보자면

위 데이터는 기존 데이터셋에서 J404 직무인 [웹 개발]에 대해 뽑아낸 자료입니다.

하이라이트 친 것처럼 2018년 11월에서 2019년 1월로 넘어간 것,

2019년 4월에서 6월로, 7월에서 9월로 넘어간 것처럼 결측이 발생한 달이 있다는 것이였습니다.

제가 앞서 모델링 과정에서 분석할 당시 이러한 결측을 처리해야한다는 것을 눈치채지못하고 있었는데,

멘토님께서 발견해주셔서!! 이를 처리하는 것까지 함께 해볼 생각입니다.


2. 결측이 발생한 date 데이터 메꾸기

가장 먼저 기존에 추가했던 2021년 9월과 2021년 10월 데이터는 제거하고

추후에 예측에 대한 정답값의 형태로 활용할 생각입니다.

이후 기존 데이터셋에서 결측이 발생한 달을 메꾸는 작업을 시도했습니다.

다양한 방법을 제시해주셨는데, 그 중 날짜에 대한 데이터셋을 새로 만들고 이를 [Join]하는 방식을 활용했습니다.

천천히 살펴보겠습니다 :)

먼저, 엑셀로 Date만 나와있는 데이터를 새로 생성해주고 이를 Brightics로 Load했습니다.

위와 같이 Date로만 이루어진 데이터를 load한 과정입니다.

이렇게 완성된 Date를 먼저 세팅해놓고, 제 데이터를 합치는 작업을 진행했습니다.

[Query Executor] 함수를 이용해서

분석에 원하고자 하는 직무(code_detailed)를 빼냈습니다.

J404만 남은 것을 볼 수 있으시죠?

이후 [Join] 함수를 활용하여 데이터셋을 합쳐보겠습니다.

저는 left table에 위에서 보여드린 새로 생성한 Date 테이블을 놓았고,

right table에 J404만 추출한 데이터를 놓았습니다.

JOIN에 여러 가지 형태가 있는데,

그 중 [Left Join]을 선택했습니다. 그림에서도 왼쪽 원에만 색이 칠해져 있죠?

미리 생성해놓은 완성본의 DATE에 J404를 선택한 데이터셋을 날짜에 맞게 끼워맞추는 과정이였습니다.

이처럼 DATE는 모두 생성되어 있고,

해당 월에 없던 데이터는 NULL로 채워져 있는 모습을 볼 수 있습니다.

다음은 제가 원하고자 하는 데이터만 다시 추출했습니다.

바로 시간과 채용 공고 수인 num 열만을 추출했습니다.

동일하게 [Query Executor] 함수를 이용했는데요.

date_left와 num 열만 추출한 모습입니다.

그렇다면 NULL로 채워진 이 채용 공고 수를 그저 냅둬야 하는 것인가요?

이러한 결측치를 메꾸는 다양한 방법이 있는데요.

그 중 Brightics가 제공하는 [Replace Missing number]이라는 함수가 있습니다.

이 함수에 관한 자세한 내용은 아래 블로그에 나와 있으니 참고 바랍니다.

https://blog.naver.com/mbmb7777/222519704207

 

[삼성SDS Brightics] 개인분석미션 3-5. 데이터 전처리 : 결측치 처리

안녕하세요~ Brightics 서포터즈 2기 정해웅입니다!!😀 저번 포스팅에서 원본 데이터를 활용하여 EDA...

blog.naver.com

이보다 저는 결측치에 대한 interpolation이 필요했고,

[Replace Missing number]에는 보간에 관한 함수가 없기에

[python script]를 활용하여 이를 진행했습니다.

interpolate(limit_direction='both')로 설정했습니다.

Table에서 볼 수 있듯이, 201812로 예를 들자면 이의 위, 아래 수인 1과 4의 평균인 2.5로 보간한 것을 알 수 있습니다.


이렇게 보간까지 완성시킨 데이터셋을 기반으로

ARIMA 모델링에 들어가게 되었습니다.


3. ARIMA 모델을 이용한 시계열 예측

완성시킨 데이터셋을 기반으로 ARIMA 모델을 이용하여 추후의 채용 공고를 예측하였습니다.

Brightics 내 [Auto ARIMA] 라는 함수가 있는데, 이는 ARIMA 모델의 파라미터를 자동으로 찾아주는 아주 굉장한 함수입니다.

제가 최종화에서 보여드린 것처럼 원래는 [AutoCorrelation]이라는 함수를 활용하여 ACF,PACF 계수를 파악하고 이를 바탕으로 ARIMA 모델의 파라미터를 찾는 꽤나 번거로운 작업을 해야하는데,

[Auto ARIMA] 모델을 활용하면 이를 한 번에!! 찾아줍니다!!

사진에서 볼 수 있듯이, 찾고자 하는 num 열을 Input Column에 넣어줍니다.

저는 가파르게 성장하는 i-ONE JOB 플랫폼의 특성을 반영하기 위해 기울기인 d=2로 설정해주었습니다.

그러자 함수 자체적으로 파라미터인 (p,d,q)=(2,2,1)로 찾아준 것을 확인할 수 있습니다.

이후 [Auto ARIMA Predict] 함수를 이용하여 원하고자 하는 예측 값의 갯수를 선택하게 됩니다.

저는 2021년 10월까지의 데이터가 궁금했기에 Prediction Number을 10으로 선정했습니다.

이 때 우측에 Table을 살펴보면 시간 순이 아닌 일련의 숫자로 1~10까지 표현되어있습니다.

이를 Date로 변형하는 작업을 해줍니다.

[Query Executor]를 활용하여

date_left라는 열을 생성해주었습니다.

이제 거의 다 왔습니다..!

이때, 주의해야할 점이 생기는데요.

제가 [Query Executor]를 활용하여 date_left를 만들어주었죠?

이는 SUBSTR 함수를 활용했기에 STRING 형식으로 데이터가 생성됩니다.

따라서 추후에 기존 데이터셋과 합칠 때

기존 데이터셋은 double형식의 date_left를 가지고 있고

제가 만든 데이터는 string 형식의 date_left를 가지고 있기에 합칠 때 형식이 달라 문제가 발생하게 됩니다.

따라서 저는 Brightics의 [Select Column]에 이 데이터 형식을 바꾸는 기능이 있다는 것이 생각나서 함수를 적용했습니다.

위와 같이 [Select Column] 함수에서

date_left 열의 Type을 String -> Double로 바꿔주었습니다.

그리고 나서야 오류없이 데이터를 합칠 수 있게 되었습니다.


최종적으로는 기존 데이터셋 (2020년 12월까지의 데이터)와 ARIMA로 예측한 데이터셋(2021년 10월까지의 데이터)를 합치는 작업입니다.

[Bind Row Column] 함수를 이용하여

Row 에 대해 합치니 시간 순으로 잘 배열된 데이터를 생성할 수 있었습니다.

이에 대해 자세히 살펴보자면

본래의 데이터셋인 2020년 12월까지의 데이터에서

2021년 10월까지의 데이터가 추가된 것을 확인할 수 있습니다.

저희가 가지고 있는 데이터셋인 2021년 9월과 10월 자료와 직접 비교해볼까요?

실제 데이터에서는 9월 53개, 10월 59개로 다소 많은 차이를 보이는 것으로 확인할 수 있습니다.

시계열 데이터에서 중간에 2021년 1월부터 9월까지 데이터가 비었고 이를 예측한 것이기에

결측에 대한 데이터도 상당히 많았고, 이를 train한 데이터도 적었기에 정확한 예측을 바라는 것은 무리라고 생각이 들었습니다.

ARIMA를 통한 시계열 예측은 정확한 분석보다는 그 추이를 살펴보는데 의의가 있기에,

다양한 IT 업종 중 [웹 개발]이라는 업종의 추이를 살펴보기엔 적합했고,

이는 모델에서도 파악할 수 있듯이 지속적인 증가 형태를 보일 것으로 예상이 됩니다.


분석을 함에 있어서 언제나 문제점들이 드러나고, 이를 재차 수정하면서 더 완성도 높은 프로젝트가 되는 것이라고 생각합니다.

멘토님께서 감사하게도 제 분석미션을 꼼꼼히 봐주시고 보완점을 말씀해주셔서 이를 피드백하며 또 몰랐던 함수들을 사용할 수 있었고,

시계열 데이터를 활용함에 있어 추후에는 더 꼼꼼하게 보면서 분석을 진행할 것 같습니다.

Brightics에서 제가 모르던 기능들과 함수들을 활용하여 분석할 수 있어서

너무 재밌게 진행했습니다 💙👏

Brightics의 기능은 어디까지인지 정말,,, 무궁무진한 것 같습니다 😀

또 찾아올지도 모르겠어서,, 작별인사는 생략할게요,, 하핫 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

긴 글 읽어주셔서 감사합니다 :)


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

#삼성SDS #브라이틱스 #브라이틱스서포터즈 #AI #분석플랫폼 #분석프로그램 #데이터분석 #빅데이터 #인공지능 #SamsungSDS #초보자분석 #분석초보 #코딩 #코딩초보 #통계 #데이터사이언스 #Scala #분석툴 #BrighticsAI #BrighticsStudio #브라이틱스스튜디오 #Brightics #대외활동 #대학생 #대학생대외활동 #삼성SDSBrightics #중소기업은행 #중소기업채용트렌드 #중소기업채용