연세대 인공지능학회 YAI

[프로젝트 : CV] 다이아몬드 가격 예측 본문

프로젝트

[프로젝트 : CV] 다이아몬드 가격 예측

_YAI_ 2022. 4. 11. 22:51

다이아몬드 가격 예측

** YAI 9기 석진혁님이 토이 프로젝트 진행 후 작성한 글입니다.


Project Review

토이 프로젝트를 진행하며 느낀점과 시도한 것추가로 시도해 볼만한 다른 기법에 대해 적어보려합니다.

 

1프로젝트를 시작하기 전에해야 할 task를 명확하게 선정하자.

 

저희 조는 다이아몬드의 가격을 예측하는 프로젝트를 진행했습니다. 캐글에서 보석에 해당하는 ID와 weight, cut, shape 등 다양한 feature와 price(정답)를 담은 csv파일과 각 id에 해당하는 다이아몬드의 이미지를 받았습니다. 프로젝트를 시작할 때, 저희 조는 price에 대한 distribution이나 feature간의 상관관계 등의 데이터 분석을 하지 않고 무작정 모델을 만들고 선정한 metric(R2 square, RMSE)가 좋은 값을 내도록 모델을 튜닝했습니다. 하지만 결과를 분석해보니 r2 square나 RMSE가 수치상으로는 좋아보여도 데이터가 불균형 하면 metric의 값을 신뢰할 수 없는 경우가 생길 수 있는 것을 알았습니다. 예를 들면 저희 조에서 사용한 데이터의 경우 Price가 700$ ~ 76000$의 범위를 가지고 있는데 20,000$ 이하가 4762개 20,000$ 이상이 34개가 있었습니다. 그래서 평균적으로 20,000$ 이하의 값들에 대해서는 오차가 1000$ 이상 나지 않았지만 20,000$ 이상의 보석의 경우 RMSE가 19,000$가량이 될 정도로 부족한 data( price가 높은)에 대해서는 예측능력이 매우 낮았습니다. 

 그래서 task를 명확하게 정하고 프로젝트를 시작해야 하는 것을 느꼈습니다. 모든 data에 대해 평균 metric이 좋다고 성능이 좋은 것이 아니었습니다. 특히 저희 task의 경우에는 비싼 보석을 더 정확하게 예측하는 것이 더 중요하다고 판단했습니다. 왜냐하면 가격 예측을 하는 경우에는 거래에서 손해를 보지 않기 위함일텐데싸고 흔한 보석에 대해서는 사실 예측을 할 필요가 없기 때문에, 데이터가 부족한 (price가 높은) 보석에 대해 price를 정확히 예측하자는 것으로 task를 명확히 정했습니다. Task를 명확히 정의하기 위해서는 데이터 분석이 선행돼야 하고, 적절한 metric이 선정돼야 하며이 프로젝트가 누구를 위한 프로젝트인지, 사용자 관점에서 신중히 고민해야 하고 그 이전에 이게 ai가 필요한 task인지까지 고민해야 되는 것을 느꼈습니다.

 

2불균형한 데이터에서 어떤 metric을 사용하면 좋을까 ?

 

저희는 회귀문제에 대한 프로젝트를 진행했지만분류문제에서 불균형한 class에 대해 분류 성능을 측정하는 지표로 f1-score가 있다는 것을 찾았습니다.

예를 들어 눈이 오는 날을 예측한다고 생각해봅니다. 100일 중에 3일이 눈이 왔는데모든 날을 눈이 오지 않았다고 예측하면 accuracy는 어떻게 될까요 ? 97%가 될 것입니다. 하지만 accuracy가 이런 문제에 대해서 좋은 metric이라고 생각할 수는 없습니다. 실제로는 눈이 올 것이라고 말한 날 중에 실제로 눈이 온 날 (Precision)을 맞추는 것이 중요하고실제로 눈이 온 날에 눈이 온다고 (recall) 얼마나 잘 맞췄는지가 중요합니다. 이렇게 Precision과 recall을 둘 다 고려해서 조화평균을 사용한 것이 f1-score인데분류문제에 대해서는 f1-score가 불균형한 데이터를 분류하는데 성능을 측정하는 좋은 지표가 될 수 있습니다. 하지만 저희 task처럼 예측문제에서도 불균형한 데이터에 대해서 예측을 할 때, 성능 측정에 좋은 metric이 또 어떤 것이 있을지 찾지 못한 것이 아쉽습니다.

 


Main

1stratified split

train set, val set, test set으로 분할할 때, random으로 split하면 안 될 것 같다는 생각이 들었습니다. 예를 들어 저희가 가용할 수 있는 20,000$ 이상의 데이터가 34장 밖에 없는데 대부분의 20,000$ 이상의 데이터가 test set으로 가서 train set에 20,000$ 이상의 데이터가 없다면 비싼 보석에 대해 price를 재대로 예측할 수 없다는 생각이 들었습니다. 그래서 Price에 자연로그를 취하고 3개의 category로 나눈뒤, 각각의 category에서 동일한 비율로 train set, validation set, test set으로 분배를 시켰습니다.

 

2weighted rmse

Train dataset에서 위처럼 계층을 나누면 6~8에 해당하는 (낮은 price)가 2494개, 8~10에 해당하는 (중간 price)가 312개, 10~12에 해당하는 (높은 price)가 7개가 있습니다. 저희 조는 앞서 설명했듯, 높은 가격에 대해 예측 정확도를 높이는 것이 목표입니다.

그래서 loss를 계산할 때, weighted를 고려해서 loss를 계산합니다. 수식은 다음과 같습니다. 수식은 다음과 같고 w는 해당하는 카테고리의 개수의 역수입니다.

$$ wRMSE = \sqrt{\frac{\sum_i w_i(\hat{x_l} - x_i)^2}{\sum_i w_i}} $$

예를 들어 저희가 예측한 x가 1000$라면, 1000달러에 해당하는 class (로그를 씌운 값이 6~10)가 2494개 있으므로 RMSE를 계산할 때, weight를 고려해서 계산하는 것입니다. 이렇게 하면많은 개수를 가진 class에 대해서는 loss를 더 작게 반영하고 많은 개수를 가진 class에 대해서는 loss를 더 크게 반영해서 적은 개수의 카테고리에 해당하는 데이터를 더 정확하게 맞출 수 있게 됩니다. Weighted rmse를 사용한 결과 다음과 같이 성능을 향상시킬 수 있었습니다.

 

3augmentation

어그멘테이션 기법을 사용했는데, 저희가 사용한 다이아몬드 이미지는 clarity나 색에 예민해서 함부로 augmentation 기법을 적용하면쓰레기값이 모델에 입력될 수 있겠다는 생각이 들었습니다.

그래서 horizontal flip, rotate 등만을 사용해서 20,000$ 이상의 price에 대해 한번은 두배로 데이터로 늘려주고 또 한번은 네 배로 데이터를 증가시키자 다음과 같이 성능을 향상시킬 수 있었습니다.

 


Discussion

1더 다양한 어그멘테이션을 적용해서 실험하지 못했던 것

2upsampling을 시도하지 못했던 것. Weighted RMSE를 사용한 것과 비슷한 맥락으로 예상

3) stratified split 뿐만 아니라 stratified k fold를 사용해서 앙상블 기법을 사용하면 더 안정적으로 결과를 낼 수 있었을 것으로 생각


저희가 사용한 데이터의 구조인데, 이렇게 resnet을 거친 image의 feature와 csv 데이터를 합치기 전에 각각 단일 모델로 성능을 비교했습니다.

Csv 정형 데이터만 사용한 모델의 경우에는 r2 square가 0.89 까지 올랐지만 image 데이터만 사용했을 때는 rsquare가 0.3 정도 밖에 나오지 못했습니다.

Csv data에 대한 Feature를 분석해 봤을 때, 

weight, length, depth 처럼 dimension에 대한 정보가 price와 깊은 연관성이 있었고, color shape symmetry clarity는 price와 깊은 연관성이 없었습니다. 그런데 저희가 제공받은 image 데이터의 경우에는

이처럼 모든 데이터가 모양에 따라 가로와 세로 끝에 맞춰져서 center crop이 이미 진행된 상태라서 cnn 기반 모델로는 중요한 feature인 dimensional feature는 얻을 수 없었고 비교적 덜 중요한 cut, clarity shape 등에 대한 정보만을 얻을 수 있었습니다. 그래서 cnn기반의 모델로 이미지 데이터만을 이용해서 예측을 했을 때, csv 데이터만 사용했을 때에 비해서 성능이 안 좋았던 것으로 예상할 수 있습니다.

 

이미지 데이터로 다이아몬드의 가격을 재대로 예측하기 위해서는 저렇게 이미 가로 세로 끝에 fit된 이미지가 아니라 동일한 거리에서 dimensional한 feature가 반영된 이미지를 사용해야할 것으로 생각됩니다.

Comments