해당 포스트는 패스트 캠퍼스에 초격차 패키지 : 50개 프로젝트로 완벽하게 끝내는 머신러닝 SIGNATURE를 공부한 뒤 복습을 위해 각색하여 작성하였습니다.
이번 12번째 미니 프로젝트에서는 태양광 패널의 일부분인 태양광 Cell의 고효율 원인분석을 진행했습니다.
여기서 '효율'이란 태양 빛을 전기로 얼마만큼 잘 전환시켰는지에 대한 개념으로, 빛을 전기로 더 잘 전환시켰을시 태양광 Cell은 고효율로 분류가 됩니다.
그렇다면 왜 태양광 Cell의 고효율 원인분석이 필요할까요? 해당 이유에 대해서는 미니 프로젝트의 문제정의 파트에서 더 자세히 설명해드리겠습니다!
미니 프로젝트를 진행할 때 첫번째 순서로 가장 중요한 문제와 기대효과를 정의했습니다. 고효율로 생산이 되는 Cell들의 원인분석이 왜 필요한지에 대해 먼저 정의한 후, 분석을 통해 얻은 결과를 통해 가질 수 있는 기대효과를 나열했습니다.
다음으로 모델링을 하기 전, 데이터를 사용할 수 있는 상태로 만들기 위해 데이터를 확인, 준비, 시각화, 가공하여 모델링을 하기 전 데이터를 준비시켰습니다.
마지막으로는 가공된 데이터를 통해 모델링을 한 후 시각화를 하여 예측값과 실제값 간의 차이가 어떻게 되는지, 모델의 성능은 어떻게 되는지 확인했습니다.
그리고 Shapley value를 통해 모델에 사용된 feature들이 모델 예측에 어떤 영향을 끼쳤는지 해석하고, 그 중에서도 고효율로 생산이 된 Cell들에는 어떤 feature들이 어떻게 영향을 미쳤는지 확인했습니다.
그렇다면 본격적으로 프로젝트 진행과정을 조금 더 자세하지만 최대한 간략하게 소개해드리겠습니다.
미니 프로젝트의 배경상황을 설명해드리겠습니다. 태양광과 같은 신재생 에너지는 지구협약에 의해 2030년까지 20~40%까지 확대가 되어야 합니다. 그래서 현재 태양광 Cell을 만들고 있는 있는 (분석을 의뢰한) 회사는 더 높은 경쟁력을 가지기 위해 더 많은 고효율의 Cell을 생산하고 싶어합니다. 고효율 Cell 분석을 통해 recipe(공정기법)을 다시 세팅하여 더 많은 Cell들이 고효율로 생산이 되도록 하는 것이 해결하고자 하는 문제입니다.
해당 문제를 해결하여 얻는 기대효과는 새로운 recipe를 도입하여 더 많은 고효율 Cell들을 생산하여 결과적으로 더 높은 경쟁력으로 더 많은 수익을 이끌어내는 것입니다. 또한 더 많은 고효율 Cell을 생산하기 위해서는 더 큰 설비투자가 필요할 수 있지만, 데이터 분석을 통해 최적의 recipe를 찾는다면 나가는 지출을 줄일 수 있어 이익을 극대화할 수 있을 것입니다.
Data Info Check와 Data Readiness Check 과정에서는 데이터의 기본적인 형태들을 확인하고 np.unique를 찍었을 때 카테고리가 단 하나, 즉 값이 하나밖에 없는 컬럼을 삭제했습니다. 값이 하나밖에 없을 경우 예측을 하는데 도움을 줄 수 없기 때문입니다.
다음으로 Data visualization 단계에서는 Y 값들의 분포를 시각화했습니다. 첫번째 그래프는 Y 값을 전부 찍어보고, 25% percentile과 75% percentile 라인을 그어보았습니다. 이어서 히스토그램을 그렸을 때, 치우쳐져 있는 부분을 제외하고는 상당히 정규분포 형태를 이루고 있는 것을 확인할 수 있었습니다.
히스토그램 오른쪽에 빨간색 점 네모를 그린 이유는, 해당 부분이 회사가 원하는 고효율의 Cell들의 값들입니다. 이후 해석 부분에서 더 자세히 다루게 될텐데, 해당 빨간색 부분이 대략 생산되는 Cell들에서 상위 10%로 고효율을 내는 Cell들입니다.
이후 Feature Engineering단계에서는 LightGBM으로 간단히 모델링을 한 후, Feature Importance 점수를 시각화했습니다. 그 결과 상위 3개의 컬럼이 압도적으로 높은 점수를 보여주었습니다. 그래서 해당 3개의 컬럼 (여기서는 컬럼들의 이름이 나와져있지 않고 마스킹 되어있습니다) 'X1, X2, X3'로만 LinearRegression으로 모델링을 했을 때, R-squared 점수는 거의 0.9999가 나왔고 Mean Squared Error 점수도 거의 0에 수렴했습니다.
그렇다면 3개의 컬럼만으로 모델링을 하면 거의 100%에 가까운 결과를 얻을 수 있으니 우리의 분석을 여기서 끝일까요? 예상하셨다시피 아닙니다! 해당 3개 컬럼의 경우 분석을 의뢰한 회사의 현업가들도 이미 알만한 높은 상관관계를 가진 변수들일 것입니다.
하지만 우리가 여기서 알고자 하는 것은 hidden factor, 즉 숨겨진 요소를 찾고자 합니다. 영향력이 큰 변수들을 제외한 나머지 변수들에서 고효율 Cell 생산에 미치는 상관관계를 찾고싶은 것입니다. 그래서 본격적인 모델링을 하기 전, 3가지 변수 (X1, X2, X3)들을 드랍했습니다.
이 단계에서 제가 배울 수 있었던 부분은 만약 높은 R-squared 점수를 마주하면 먼저 의심부터 하자!였습니다. 또 해당 데이터처럼 변수가 많을시에는 하나하나 시각화하며 feature engineering을 하기보다 먼저 빠르게 모델을 돌려서 가공을 어떻게 할지 방향성을 잡는 것이 효율적이라는 것을 배울 수 있었습니다.
다음으로 4가지 하이퍼파라미터를 튜닝하며 모델링을 진행했습니다.
그 결과 약 0.3139의 R-squared 점수가 나오는 베스트 모델이 나왔습니다. 영향력이 가장 컸던 'X1, X2, X3' 변수가 빠지다 보니 R-squared 급격하게 줄어드기는 했지만, 현업에서는 0.25 정도도 유의미하다고 판단하기 때문에 이 정도 점수이며 충분히 유의미하다고 판단이 되었습니다.
예측 결과를 시각화하면, 제일 위에 있는 추세선 그래프에서 파란색 선이 예측 값입니다. 모든 값을 다 잡아낼 수는 없었지만 0.3139의 R-squared 점수로도 트렌드를 잘 따라가는 것을 발견할 수 있었습니다.
다음으로 왼쪽 아래 그래프는 y true 값과 y 예측값을 찍은 값인데, 서로 상관관계가 있음을 발견했습니다.
마지막 그래프에서는 이번 모델링에서 영향을 끼치는 변수들의 Feature Importance 점수를 볼 수 있는데, 'X23, X16, X253' 등의 변수들의 영향력이 컸습니다.
다음으로는 강력한 해석력을 가질 수 있도록 도와주는 SHAP 라이브러리를 통해 해석을 해보겠습니다.
SHAP을 통해서는 단순히 변수의 Feature Importance 뿐만 아니라 Feature가 모델에 영향을 어떻게 끼쳤는지에 대한 정보를 제공하는 강력한 라이브러리입니다.
왼쪽에 Summary Plot을 보면 Feature Importance의 순위를 먼저 확인할 수 있습니다. 하지만 순위는 이전 모델링에서 보았던 Feature Importance 순위와는 차이가 좀 보입니다. 하지만 가장 큰 영향을 끼친 'X23' 변수는 동일하게 첫번째 순위에 위치해있습니다.
그렇다면 X23을 예시로 Summary Plot을 해석하면, X23 값이 커질수록 (세로선을 기준으로 오른쪽) 예측값(효율)은 떨어지고 값이 작아질수록 (세로선을 기준으로 왼쪽) 예측값이 커진다는 것을 알 수 있습니다. 즉, Summary Plot은 변수들이 타겟값의 어떻게 영향을 끼치는지 방향성을 알려줍니다. 그 다음 순위에 있는 변수, X253의 경우도 똑같이 값이 커질수록 효율이 낮아지고, 값이 작아지면 효율이 커지는 데 기여를 하는 것을 볼 수 있습니다.
다음으로 Dependence Plot은 SHAP value의 변화와 다른 변수와의 상관관계도 같이 보여줍니다. 첫번째 왼쪽 위에 있는 그래프를 예시로 들면, X23의 경우 값이 작아지면 SHAP 값이 커집니다. 이때 오른쪽의 colorbar는 X254의 값인데, 빨간색일수록 큰 값입니다. 종합하면, X23의 값이 작고 X254의 값이 커야 SHAP 값이 작아집니다. 이렇듯 Dependence Plot은 변수들의 interaction이 어떻게 되는지까지 알려주는 강력한 해석도구입니다.
이번엔 이번 프로젝트의 목적이었던 고효율군 Cell 분석을 해보겠습니다. 먼저 고효율을 기록했던 Cell들의 상위 10% 데이터를 추출했습니다. 그런 다음 모델링을 한 후 예측값을 뿌렸을 때 MSE가 낮은, 즉 학습을 잘한 데이터를 추출했습니다. 학습이 잘 된 데이터가 원인분석을 해도 유의미한 해석을 내놓을 수 있기 때문입니다.
그 다음 force_plot을 통해서 개개인 값들에 변수들이 영향을 어떻게 끼쳤는지 확인해보았습니다.
첫번째 변수의 경우는 base value에서 기록된 더 높은 값으로 이동시킨 변수는 X23과 X247입니다. 그 중에서도 X247이 큰 영향을 미쳤습니다. 두번째 변수의 경우 값을 높이는데 X23이 기여하는 와중에 X261이 억제하고 있는 것을 확인할 수 있었습니다. 세번째 경우의 경우도 X23이 효율을 높이면 X267이 다시 낮추고 있는 것을 볼 수 있었습니다.
그래서 현재 3개의 값을 보면 Summary Plot에서 본 상위 세개의 변수의 영향력이 큰 것을 확인할 수 있었습니다.
이번 미니 프로젝트에서는 문제해결 프로세스 정의 모델링도 중요했지만, Feature Engineering을 할 때 빠르게 모델링을 돌려보는 것과 SHAP 라이브러리로 해석을 하는 것이 저에게 크게 다가왔습니다.
그전 미니 프로젝트들에서는 변수의 숫자가 많지 않아 histogram, heatmap을 그리며 간단하게 시각화를 했습니다. 하지만 이번 미니 프로젝트처럼 변수의 숫자가 너무 많을때에는 다 그려보는 것이 어려웠습니다. 그래서 Feature Engineering을 할 때 간단하게 모델링을 하여 어느 정도 방향성을 잡는 것이 효율적이라는 것을 배울 수 있었습니다.
또한 현업에서는 현업가들에게 단순히 모델의 성능을 알려주는 것이 아닌, 왜 이 모델이 좋은지에 대해 설명을 해야할 것입니다. 어떤 변수가 높은 효율에 영향을 끼쳤는지, 어떻게 영향을 끼쳤는지 등등에 대한 설명이 있어야 현업가가 모델을 활용할 수 있을 것이기 때문입니다. 그래서 이번 세가지 plot (summary_plot, dependence_plot, force_plot)을 공부한 과정은 배울점이 많은 시간이었습니다.
부족하지만 읽어주셔서 감사합니다:) 피드백 언제나 환영입니다:)