3.1 Ensemble Learner
본 연구에서 탑재시수를 예측하기 위한 기계학습 모델로 Ensemble 모델을 선택했다. Ensemble 모델을 사용하는 이유는 학습 모델별 장단점이 존재하고 어떤 단일 학습 모델이 적합한지 모두 테스트하기 번거롭기 때문이다. 즉, 하나의 weak learner로 결과를 정하는 것이 아니라 여러 weak learner들의 결과를 조합하여 최종 결과물을 도출한다고 할 수 있다. 또한 Ensemble 모델은 다른 단일 학습 모델에 비해서 특정 조건만 만족시키면 높은 정확성을 갖는데, 이는 Binomial distribution으로 설명할 수 있다. 단일 모델과 Ensemble 모델의 오차 확률을 비교하면 다음과 같다.
pk(n,p)=∑k=0n/2nkpk(1-p)n-k | (1)
|
학습된 모델의 수를 n, 각 단일 모델들의 오차 확률을 p(모든 모델의 p는 단일 값이라 가정)라고 했을 때, Ensemble 모델의 오차 확률은 식 (1)과 같다. 여기서 Ensemble을 구성하는 모델들의 수가 많으면 많을수록 오차 확률이 줄어드는 것을 확인 할 수 있다. 또한 Ensemble 모델은 모델의 과반 수 이상이 틀렸을 경우 틀렸다고 판단을 한다. 따라서 p가 0.5보다 작다면 Ensemble 모델의 오차 확률이 단일 모델의 오차 확률보다 매우 작을 수밖에 없다. Ensemble 모델은 위에서도 언급했듯이 여러 weak learner들을 조합하여 결과를 예측하고 이에 따라 단일 학습 모델에 비해서 예측 오차율이 줄어들게 된다. 이러한 Ensemble 모델에는 여러 종류가 있는데, 본 연구에서는 주로 세 가지 방법을 사용했다. 첫째로 Bagging은 데이터를 복원 추출하여 각 모델을 학습 시켜 결과를 집계하는 방법이다. 먼저 대상 데이터로부터 무작위로 복원 추출하여 데이터를 추출하고, 추출된 데이터가 일종의 표본 집단이 된다. 이 상태에서 동일한 모델을 학습 시키고 예측 변수들을 집계하여 그 결과로 모델을 생성한다. 이러한 방식을 Bootstrap aggregating이라고 부른다. 이러한 방법을 채택하는 이유는 다음과 같다. 대부분의 기계학습에 생기는 오류는 높은 편향(bias)으로 인한 과소적합(underfitting), 높은 분산(variance)로 인한 과 적합(overfitting)인데 Ensemble 기법은 이러한 오류를 최소화 하는데 도움이 된다. 특히 Bagging의 경우 각 샘플에서 나타난 결과를 일종의 평균값으로 집계하기 때문에 과 적합을 피할 수 있다(Breiman, 1996). 둘째로, Boosting은 맞추기 어려운 문제를 예측하는데 특화되어 있으며, Bagging과 동일하게 무작위로 복원추출을 하지만, 가중치를 부여한다는 차이점이 있다(Schapire, 1990). Bagging이 병렬로 학습하는 반면, Boosting은 순차적으로 학습 시킨다. 학습이 끝나면 나온 결과에 따라 가중치가 재분배 되며, 오답에 대해 높은 가중치를 부여하고 정답에 낮은 가중치를 부여하기 때문에 오답에 더욱 집중 할 수 있게 되고, Bagging에 비해서 정확도가 높게 나타나지만, 그만큼 특이 값(outlier)에 취약하기도 하다. 마지막으로 Fig. 2는 Stacking ensemble 모델을 그림으로 표현한 것으로, Stacking은 서로 다른 모델들을 조합해서 최고의 성능을 내는 모델을 생성한다. Stacking모델은 다양한 알고리즘을 조합하여 구성할 수 있으며, 이러한 조합을 통해서 각 알고리즘의 장점을 취하면서 약점을 보완 할 수 있다. 즉, 일반적으로 학습하는 하나의 모델보다 성능을 향상시킨다(Wolpert, 1992). 본 연구에서의 예시를 들면 각 모델들에 단일 Ensemble 모델인 Random forest 혹은 Gradient boost 등을 이용하여 Stacking ensemble 모델을 구성한다.
Fig. 2
Stacking ensemble algorithm overview
Fig. 3은 Bagging 과 Boosting ensemble의 구성을 그림으로 설명한 것으로 Bagging의 결과를 집계하여 도출하는 것과 Boosting의 가중치 업데이트를 결과를 예측하는 것을 보여준다.
Fig. 3
Bagging & Boosting ensemble algorithm overview
3.2 단일 Ensemble 모델
본 연구에서는 각 Ensemble 모델들의 성능을 평가하기 위해서 다음과 같이 학습과 검증 과정을 거친다. 먼저 전체 학습 데이터의 70%를 학습하고 나머지 30%로 예측을 한다. 여기서 학습 데이터를 통해 학습한 후 다시 학습 데이터로 예측을 했을 때의 에러 값을 Train error라고 하며, 학습 데이터로 학습한 후 검증 데이터로 예측한 에러 값을 Test error라고 한다. 또한 데이터를 나누는 것은 무작위로 진행되기 때문에 동일한 조건에서 비교하기 위해서 같은 난수를 발생 시킬 수 있도록 seed를 고정 시켰다. 그리고 계수 값뿐만 아니라 총 블록탑재 시수의 합을 계산하여 비교하고자 했다. 따라서 동일한 seed로 물량과 품셈 값을 분류하고 예측한 계수 값을 곱해 정답 계수 값으로 구한 블록탑재 시수의 합의 오차율을 비교했다. 본 연구에서는 계수 값의 특성상 회귀 분석 모델을 통해 예측한다고 언급한 바 있다. 따라서 에러를 기존의 오차율을 통해 확인 할 수 없기 때문에 Mean Square Error를 사용했으며 식 (2)와 같이 구할 수 있다.
식 (2)의 Yi는 예측한 값을, Y^i는 정답을 의미하여 정답과 예측 값을 빼고 제곱한 값들을 더해준 뒤 평균을 구해 Mean Square Error를 구한다. 다음으로 본 연구에서 사용한 알고리즘들은 다음과 같다. Decision tree와 Bagging의 대표적인 알고리즘으로 여러 Decision tree로 구성되며, 샘플을 여러 번 뽑아 각 모델을 학습시켜 결과를 집계하는 Random forest(Breiman, 2001), Boosting의 Gradient boosting(Breiman, 1997)과 Square loss gradient boosting, 그리고 최근 가장 좋다고 알려져 있는 XG boosting, 총 다섯 개의 알고리즘을 사용했다.
위 Table 6, 7, 8은 각 A, B, C 호선의 단일 Ensemble 알고리즘의 에러 값들이다. 앞서 언급했듯이 블록탑재 시수의 합 오차율(ship work time relative error rate)이란 예측한 계수 값과 물량, 품셈 값을 다시 곱한 후 더한 것의 오차율로, 예측된 블록탑재 시수의 합과 target 블록탑재 시수의 합을 비교한 값이다. 위 Table 들의 결과를 통해서 Decision tree의 경우 Train error가 0에 수렴하는데 반해 상대적으로 Test error가 큰 것을 확인 할 수 있으며, 이는 과적합의 위험이 있기 때문에 정확한 성능 평가를 하는데 어려움을 초래 할 수 있다. 따라서 A호선에서는 높은 오차율을 갖지만 나머지 두 호선에서 좋은 결과를 얻는다고 해도 가장 좋은 알고리즘이라고는 판단할 수 없다. 더군다나 본 연구의 데이터는 기계학습에 적용하기에 매우 적기 때문에 생기는 문제를 고려하지 않을 수 없다. 따라서 Stacking ensemble을 통해 더 향상된 오차율을 갖는 모델을 구축하고자 했다.
Table 6.
Single ensemble model error of ship A
A series
|
Ship work time
Relative error rate
|
MSE
|
Model
|
Train
|
Test
|
Train
|
Test
|
Decision
|
0.00%
|
3.41%
|
0.0000
|
0.0140
|
Square
|
0.71%
|
1.18%
|
0.0095
|
0.0122
|
Gradient
|
0.71%
|
1.20%
|
0.0095
|
0.0121 |
Random
|
0.50%
|
0.07%
|
0.0149
|
0.0207
|
XG
|
0.82%
|
0.33%
|
0.0103
|
0.0135
|
Table 7.
Single ensemble model error of ship B
B series
|
Ship work time
Relative error rate
|
MSE
|
Model
|
Train
|
Test
|
Train
|
Test
|
Decision
|
0.00%
|
0.02%
|
0.0000
|
0.0141
|
Square
|
0.04%
|
1.50%
|
0.0076
|
0.0135 |
Gradient
|
0.04%
|
1.50%
|
0.0076
|
0.0135 |
Random
|
0.04%
|
1.70%
|
0.0161
|
0.0215
|
XG
|
0.40%
|
1.43%
|
0.0086
|
0.0145
|
Table 8.
Single ensemble model error of ship C
C series
|
Ship work time
Relative error rate
|
MSE
|
Model
|
Train
|
Test
|
Train
|
Test
|
Decision
|
0.00%
|
1.71%
|
0.0000
|
0.0107 |
Square
|
0.01%
|
0.24%
|
0.0024
|
0.0203
|
Gradient
|
0.01%
|
0.15%
|
0.0024
|
0.0207
|
Random
|
0.15%
|
0.13%
|
0.0098
|
0.0193
|
XG
|
0.24%
|
0.74%
|
0.0034
|
0.0201
|
3.3 Stacking Ensemble 모델
본 연구에서 가장 중점적으로 다루고자 하는 것은 Stacking ensemble 모델로 각 모델의 장점을 취하고 단점을 보완하여 오차율을 최소화 하고자 했다. 대게 Stacking ensemble의 학습 모델들을 선정할 때 단일 모델을 많이 사용하지만 본 연구에서는 에러를 최소화하기 위해서 단일 Ensemble 모델을 다시 Stacking ensemble 모델로 구성하였다. 또한 각 학습 데이터에 따라서 좋은 결과를 갖는 알고리즘이 다르므로 사용한 단일 Ensemble 모델들과 Decision tree, 총 다섯 개의 알고리즘을 조합하여 열 개의 결과를 비교해 보았다.
Table 9, 10은 A호선의 Stacking ensemble 에러이며, Table 9는 전체 블록탑재 시수 합의 오차율을, Table 10은 Mean Square Error의 결과이다. 모델의 성능을 비교하기 위해서 Mean Square Test Error를 기준으로 비교하면, A호선의 경우 가장 좋은 단일 모델은 Table 6에서 확인 할 수 있듯이 Gradient boost로 0.0121의 Mean Square Error를 갖는다. 또한 Stacking ensemble은 Decision tree, Square loss gradient boosting, Gradient boosting 조합의 값이 0.0091로 가장 좋은 것으로 확인 되었다.
Table 9.
Stacking ensemble model error of ship A
Combination
|
Train
|
Test
|
XG
|
Decision
|
Random
|
0.46%
|
1.44%
|
XG
|
Decision
|
Square
|
0.51%
|
1.65%
|
XG
|
Decision
|
Gradient
|
0.51%
|
1.65%
|
XG |
Random |
Square |
0.70% |
0.70% |
XG |
Random |
Gradient |
0.70% |
0.70% |
XG
|
Square
|
Gradient
|
0.75%
|
0.91%
|
Decision
|
Square
|
Gradient
|
0.47%
|
1.94%
|
Decision
|
Square
|
Random
|
0.42%
|
1.73%
|
Decision
|
Random
|
Gradient
|
0.42%
|
1.72%
|
Random
|
Square
|
Gradient
|
0.66%
|
0.99%
|
Table 10.
Stacking ensemble model MSE of ship A
Combination
|
Train_MSE
|
Test_MSE
|
XG
|
Decision
|
Random
|
0.0051
|
0.0112
|
XG
|
Decision
|
Square
|
0.0044
|
0.0094
|
XG
|
Decision
|
Gradient
|
0.0044
|
0.0094
|
XG
|
Random
|
Square
|
0.0105
|
0.0139
|
XG
|
Random
|
Gradient
|
0.0105
|
0.0139
|
XG
|
Square
|
Gradient
|
0.0097
|
0.0125
|
Decision |
Square |
Gradient |
0.0042 |
0.0091 |
Decision
|
Square
|
Random
|
0.0048
|
0.0107
|
Decision
|
Random
|
Gradient
|
0.0048
|
0.0107
|
Random
|
Square
|
Gradient
|
0.0102
|
0.0134
|
Table 11, 12는 B호선의 Stacking ensemble 에러 값이며, 단일 모델 중 가장 우수한 모델은 Table 7의 표를 통해 Square loss gradient boosting과 Gradient boosting이 동일한 0.0135값을 가진다. 또한 가장 우수한 조합으로는 A호선과 마찬가지로 Decision tree와 Square loss gradient boosting, Gradient boosting이 조합이 0.0105의 값이 도출하는 것을 확인했다.
Table 11.
Stacking ensemble model error of ship B
Combination
|
Train
|
Test
|
XG
|
Decision
|
Random
|
0.19%
|
0.99%
|
XG |
Decision |
Square |
0.26% |
0.95% |
XG |
Decision |
Gradient |
0.60% |
0.95% |
XG
|
Random
|
Square
|
0.32%
|
1.46%
|
XG
|
Random
|
Gradient
|
0.32%
|
1.49%
|
XG
|
Square
|
Gradient
|
0.40%
|
1.45%
|
Decision
|
Square
|
Gradient
|
0.26%
|
0.98%
|
Decision
|
Square
|
Random
|
0.19%
|
1.02%
|
Decision
|
Random
|
Gradient
|
0.19%
|
0.99%
|
Random
|
Square
|
Gradient
|
0.32%
|
1.46%
|
Table 12.
Stacking ensemble model MSE of ship B
Combination
|
Train_MSE
|
Test_MSE
|
XG
|
Decision
|
Random
|
0.0048
|
0.0117
|
XG
|
Decision
|
Square
|
0.0036
|
0.0106
|
XG
|
Decision
|
Gradient
|
0.0036
|
0.0106
|
XG
|
Random
|
Square
|
0.0093
|
0.0144
|
XG
|
Random
|
Gradient
|
0.0093
|
0.0144
|
XG
|
Square
|
Gradient
|
0.0079
|
0.0137
|
Decision |
Square |
Gradient |
0.0034 |
0.0105 |
Decision
|
Square
|
Random
|
0.0045
|
0.0115
|
Decision
|
Random
|
Gradient
|
0.0045
|
0.0115
|
Random
|
Square
|
Gradient
|
0.0090
|
0.0142
|
마지막으로 Table 13과 Table 14는 C호선의 에러 값을 나타내고 있다. C호선에서 가장 우수한 단일 모델은 Table 8을 통해서 Decision tree의 0.0107인 것을 알 수 있으며, Stacking Ensemble의 조합은 XG boosting, Decision tree, Random forest로 0.0111의 값이 도출 되었다. 그러나 앞의 두 호선과는 다르게 Stacking ensemble의 에러 값이 Decision tree의 에러 값 보다 큰 것을 확인 할 수 있는데, 이는 C호선의 데이터가 다른 두 호선에 비해서 학습 할 수 있는 데이터가 충분하지 않아 생긴 오차로 보인다. 또한 Table 9, 11, 13의 오차율이 가장 작은 조합은 Table 10, 12, 14의 조합과는 다른 것을 확인 할 수 있는데 이는 각각 예측된 하나의 계수 값의 오차율과 물량, 품셈 값이 상이해서 나타나는 현상으로, 블록탑재 시수의 합 오차율만으로 학습 모델의 성능을 판단할 수 없어 Mean Square Error를 사용해 비교한 것을 밝힌다.
Table 13.
Stacking ensemble model error of ship C
Combination
|
Train
|
Test
|
XG
|
Decision
|
Random
|
0.12%
|
0.90%
|
XG
|
Decision
|
Square
|
0.08%
|
0.87%
|
XG
|
Decision
|
Gradient
|
0.08%
|
0.85%
|
XG
|
Random
|
Square
|
0.12%
|
0.37%
|
XG
|
Random
|
Gradient
|
0.12%
|
0.37%
|
XG
|
Square
|
Gradient
|
0.08%
|
0.40%
|
Decision
|
Square
|
Gradient
|
0.00%
|
0.64%
|
Decision
|
Square
|
Random
|
0.05%
|
0.71%
|
Decision
|
Random
|
Gradient
|
0.05%
|
0.71%
|
Random |
Square |
Gradient |
0.05% |
0.19% |
Table 14.
Stacking ensemble model MSE of ship C
Combination
|
Train_MSE
|
Test_MSE
|
XG |
Decision |
Random |
0.0024 |
0.0111 |
XG
|
Decision
|
Square
|
0.0013
|
0.0127
|
XG
|
Decision
|
Gradient
|
0.0013
|
0.0127
|
XG
|
Random
|
Square
|
0.0041
|
0.0174
|
XG
|
Random
|
Gradient
|
0.0041
|
0.0173
|
XG
|
Square
|
Gradient
|
0.0027
|
0.0201
|
Decision
|
Square
|
Gradient
|
0.0011
|
0.0130
|
Decision
|
Square
|
Random
|
0.0021
|
0.0113
|
Decision
|
Random
|
Gradient
|
0.0021
|
0.0113
|
Random
|
Square
|
Gradient
|
0.0037
|
0.0177
|
Table 15 부터 Table 17까지는 각호선의 Feature engineering을 적용한 데이터를 Stacking ensemble의 결과 중 가장 좋은 조합과 에러 값을 나타내고 있다. 결과의 비교는 Mean Square Error로 진행했다. A호선의 결과를 확인해 보면 가장 좋은 test error인 0.0091에 비해서 Feature engineering을 적용한 결과인 0.0107과 0.0133으로 차이가 일부 나타난 것을 확인 할 수 있으나, Feature engineering을 적용하지 않은 Stacking ensemble의 에러 값 중에서는 이보다 더 큰 에러를 갖는 경우도 확인 할 수 있다. 또한 C호선의 경우에는 Decision tree를 적용한 결과가 더 낮은 에러 값을 갖는 것을 확인 할 수 있는데, 이는 앞서 언급했듯이 데이터가 다른 두 호선에 비해 매우 부족하여 특성 항목들의 상관관계를 분석하기에 충분하지 않아 생기는 현상으로 보이며, PCA와 Decision tree를 비교하여 분석하면, 에러 값이 큰 차이를 보이지 않아 PCA의 정답을 고려하지 않는다는 제한점은 본 연구에서는 크게 작용하지 않은 것으로 판단된다. 마지막으로 한 시리즈 호선의 학습 데이터를 통해서 다른 시리즈 호선의 블록탑재 시수를 검증해보았다. 학습할 시리즈 호선의 데이터는 데이터의 수가 가장 많고 예측 결과가 우수했던 A호선으로 선택했고 A호선의 다른 시리즈 호선을 검증 데이터로 삼아 전체 블록탑재 시수의 합으로 오차율을 비교했으며, Stacking ensemble 모델은 A호선에서 가장 예측 결과가 좋았던 Decision tree, Square loss gradient boost, Gradient boost의 조합을 사용했다. 또한, 검증을 진행할 때 앞서 언급했던 validation방법을 사용하지 않고 A호선의 900개의 행을 가진 데이터 전부를 참여시켜 학습을 진행하였고 검증 데이터 전부가 학습된 모델을 통해 예측 값을 산출 했다. 여기서 검증 데이터의 행수는 927개이며, 총 블록탑재 시수의 합은 91705이고 예측한 값은 91944가 도출되어, 검증 데이터의 전체 블록탑재 시수 오차율은 0.26%가 나오는 것을 확인했다.
Table 15.
Stacking ensemble model error with Feature engineering of ship A
Decision
|
Combination
|
Decision
|
Square
|
Gradient
|
Train
|
Test
|
0.0039
|
0.0107
|
PCA
|
Combination
|
XG
|
Decision
|
Random
|
Train
|
Test
|
0.0050
|
0.0133
|
Table 16.
Stacking ensemble model error with Feature engineering of ship B
Decision
|
Combination
|
XG
|
Decision
|
Gradient
|
Train
|
Test
|
0.0030
|
0.0133
|
PCA
|
combination
|
Decision
|
Square
|
Gradient
|
Train
|
Test
|
0.0028
|
0.0122
|
Table 17.
Stacking ensemble model error with Feature engineering of ship C
Decision
|
Combination
|
XG
|
Decision
|
Gradient
|
Train
|
Test
|
0.0017
|
0.0078
|
PCA
|
Combination
|
Decision
|
Square
|
Gradient
|
Train
|
Test
|
0.0019
|
0.0107
|
Fig. 4는 검증한 시리즈 호선의 그룹별 블록탑재 시수 에러를 나타낸 것이다. error rate의 항목을 보면 그룹마다 예측 값이 증가하거나 감소하는 것을 확인 할 수 있지만 대게 1% 이내로 큰 오차가 발생하지 않았다. 결국 형상이 일부 다른 시리즈 호선의 블록탑재 시수 추정에도 사용가능함을 확인 할 수 있었다. 명확하게 하기 위해서는 전통적인 원단위 추정과 총 블록탑재 시수와의 비교가 필요하지만, 조선소의 요청으로 비교자료를 제시할 수 없었다.
Fig. 4
Group error rate