모델링 - 케일 엽수 증가 및 LAI 예측 모델 with AIHub V2
AIHub에서 구득한 데이터로 케일 엽수 증가 및 LAI 예측 모델 제작 V2



모델링 - 지난 글

목차

  1. 데이터 전처리
  2. 모수 추정
  3. 결과
  4. 기존 LAI 예측에서의 문제
  5. 수식 변경
  6. 결과
  7. 엽 각도
  8. 결론




기존의 케일 엽수 증가 및 LAI 예측 모델에서 발생한 문제점을 수정함과 동시에 피팅에 사용한 데이터를 조금 더 정제하여 더 정확한 모델을 만들고자 하였다.

기존 데이터 엽수의 이상값을 이미지로 직접 확인하여 수정하는 과정을 통해 정제된 엽수 데이터를 확보하였다. 또한 DAP 0~30일 까지 모두 일관적으로 18°C, 21°C, 24°C 온도 분포를 가지는 엽수만을 이용하여 다시 피팅하였다.


엽수 증가 모델

데이터 전처리

데이터의 이상값을 제거하고, DAP에 따른 온도 분포가 일정한 개체만을 선정하여 DAP에 따른 엽수 분포에 대한 산점도를 그려보았다.


temperature_distribution

DAP Leaf Increase



모수 추정

각 온도별 DAP 별 엽수 분포 평균을 구하여 예측값과의 오차에 제곱을 하여 error를 계산하였고, 이를 합산하여 총 error의 값이 가장 작도록 엑셀의 해찾기를 이용하여 모수를 추정하였다.

image

error: (LN - LN_observed)^2


앞선 엽수증가 모델 V1 에서 정의한 엽수 증가 식을 적용하고, 모수를 추정하였다. 엑셀의 해찾기를 통해 error의 합산이 가장 작은 모수를 찾았다.

image


최종 모수는 다음과 같다.

image



결과

최종 피팅 결과는 다음과 같다.

18°C 결과

image

18°C Model Leaf Number


21°C 결과

image

21°C Model Leaf Number

24°C 결과

image

24°C Model Leaf Number


model_results


LAI 예측

기존 LAI 예측에서의 문제

새로 전처리한 데이터를 이용하여 온도별 엽수에 따른 엽장 분포를 산점도로 그려보았다.

length_distribution


기존 LAI 예측은 엽장과 엽면적에 따른 2차식을 도출하고, 엽서에 따른 엽장 분포를 통해 엽장의 길이를 구하고, 이를 2차식에 대입하여 엽면적을 계산하는 방식으로 모델이 구성되었다.

이때, 엽서에 따른 엽장의 분포는 가우시안 정규분포로 피팅된다.

eachLen


하지만 생장점에서 새로 발생한 잎의 엽장이 4cm인 점과 새로 엽이 발생했음에도 기존 잎의 엽장이 0에 수렴하는 분포로 보아 엽수 3~8장 일때의 엽장의 길이와 11~17장 일때의 엽장의 길이가 정상적이지 않다고 판단하였다.



수식 변경

midRateLN: = IF(AND(Ta > 0, Ta<Txleaf), Rxleaf * 모수 / LeafNumber *((Txleaf-Ta)/(Txleaf-Toleaf))*(Ta/Toleaf)^(Toleaf/(Txleaf-Toleaf)),0)

따라서 위 엽 발생 모델에서 새롭게 도출한 식인 midRateLN을 모티브로 삼아 엽장 분포 식을 변경하였다.

midRateLn 에서 엽수가 6장인 구간 전후로 엽발생 속도가 달라지는 경향을 알 수 있었다. 따라서 엽장의 분포 역시 이를 따라 엽수 6장 전후로 분포가 달라질 것이라 가정하고 다시 피팅을 하였다.


기존 파이썬의 배추모델의 경우 엽장 분포를 다음과 같이 피팅한다. 가우시안 정규분포

def eachLenDistribution(self, leafnumber):  ## internal function
    eachLenDist = []
    if leafnumber < 8:                    ## limit of leafnumber 8장 보다 작을 경우 오류 방지
        for i in range(leafnumber):
            eachLenDist.append(1.0)
    else:
        a = 20.347*np.log(leafnumber) - 40.703 # cabbage
        b = 0.2086*(leafnumber) + 1.6862 # cabbage
        for i in range(1,leafnumber+1):
            eachLen = a * np.exp(-0.5 * ((i - b) / b)**2)
            eachLenDist.append(eachLen)
    return eachLenDist


eachLen_before_6


eachLen_after_6


eachLen



결과

재식밀도에 대한 파라미터와 RMSE는 다음과 같다.

image


예측한 LAI와 실측값에 대한 결과는 다음과 같다.

LAI_compare



엽 각도

엽수가 6장이 되는 기점으로 엽수 및 엽장이 증가 하는 속도가 달라지는 것을 데이터를 통해서 확인할 수 있었다. 이에 대한 원인을 정성적으로 파악하기 위해 탑뷰로 찍은 이미지를 직접 확인한 결과, 엽수가 5장에서 6장이 되는 지점 부터 새로 발생한 잎에 의해 가려지는 부분이 생기는 것을 확인할 수 있었다.


엽수 5장

image


엽수 6장

image



결론