📨 [뉴스레터] 더 강력해져서 돌아온 5호 뉴스레터!

2023.04.14 18:00 968 Views

안녕하세요, 데이커 여러분! 뉴스레터가 찾아왔습니다. 😁

이번 뉴스레터에는 유난히 전해 드릴 소식이 많은데요! 아파트 실거래가 예측 대회 솔루션과 GPT 논문 리뷰, GPT 활용 꿀팁, 그리고 데이스쿨 오프라인 일정 변경 소식과 대회 소식까지! 알찬 만큼 스크롤도 긴 이번 뉴스레터! 열심히 준비했으니, 함께 시작해 보시죠!


지난 뉴스레터는 바로 여기! 👇

📨 [뉴스레터 1호] 데이콘의 새로운 시도, 뉴스레터!

📨 [뉴스레터 2호] 데이콘 뉴스레터, 또 왔습니다!

📨 [뉴스레터 3호] 3월에 보내는 3호 뉴스레터! 🌸

📨 [뉴스레터 4호] 봄과 함께 찾아온 4호 뉴스레터!



데이콘의 뉴스레터는 2주에 한 번, 수요일에 발송됩니다!


🚨 (중요!) 데이스쿨 오프라인 11기 일정 변경!

실무자에게 배우는 4주 완성 데이터 사이언스 교육, 데이스쿨 오프라인 일정이 변경되었다는 소식입니다!

교육 신청은 4월 24일 (월)까지, 교육 기간은 4월 29일 (토)부터 5월 20일 (토)까지 총 4주간 진행되니,

일정이 맞지 않아 망설이고 계셨다면 주목해 주세요! 😎




🕺 수상자 솔루션

아파트 실거래가 예측 경진대회


이번 뉴스레터에서 소개할 수상자 솔루션은 바로 언제나 뜨거운 관심을 받는 금융 분야, 그중에서도 부동산 데이터를 활용하여 열렸던 ‘아파트 실거래가 예측’ 경진대회입니다.

🔍 여기서 잠깐,

금융 분야는 전산화를 통한 데이터 확보와 데이터 분석에 특히 큰 관심을 기울이는 산업 분야 중 하나입니다. 금융 분야에서는 데이터 분석을 통해 미래의 경제 상황을 정확하게 파악하고 싶어하기 때문입니다. 이런 금융 데이터는 금융 거래의 특성상, 시계열 데이터와 정형 데이터인 경우가 많습니다. 하지만 급격한 전산화 과정과 이에 따른 시스템 장애 때문에 결측값도 흔하게 나타납니다.

이런 금융 데이터는 어떠한 방법을 사용해야 효과적으로 분석할 수 있을까요?

데이콘에서 진행한 ‘아파트 실거래가 예측’ 경진대회에서는 직방에서 제공한 아파트 실거래가 데이터를 사용했습니다. 해당 데이터는 시계열 데이터이고, 정형 데이터이며, 많은 결측값(0값)이 존재하는 데이터입니다.


과연 어떤 솔루션이 나왔을까요?

본격적으로 1위, ‘통계청김웅곤+양경성+민성욱EDA김현우’ 팀의 솔루션을 살펴보겠습니다! 👀




1. 시계열 특성을 고려한 validation 데이터 구축

이번 대회에서 예측해야 하는 test 데이터는 train 데이터 시점에서는 알 수 없는 미래 시점의 데이터로 구성되어 있습니다. 그렇기에 ‘통계청김웅곤+양경성+민성욱EDA김현우’ 팀은 validation 데이터를 구축할 때에도 test 데이터와 유사도를 높이기 위해, train 데이터 안에서 아파트 별로 마지막 거래를 사용했습니다.



2. 데이터 전처리

그리고 이번 대회에서는 다수의 결측값이 존재했는데, 이를 해결하기 위해서 데이터를 상세히 살펴 결측값을 대체했습니다. 예를 들어, 이번 데이터셋에서 ‘room_count’ 피처의 경우, 0일 때 결측값을 의미합니다. 이 결측값을 대체하기 위해 동일한 아파트의 값들을 살펴보고, 해당 값으로 결측값 대체를 진행했습니다.

또한 유의미한 파생변수를 생성하기 위해 부동산 관련 지식을 활용했습니다. 예를 들어 아파트 재건축의 주요 고려 요소 중 하나인 용적률을 직접 계산하거나, 아파트 층의 비율을 계산하거나, 동일 아파트에서 마지막으로 거래가 이뤄진 날짜를 계산하는 등의 과정을 거쳐 파생변수를 생성했습니다.

이후에는 부동산 선정에 있어서 중요하다고 여겨지는 접근성 관련 데이터를 외부 데이터로 활용하였고, 이렇게 만들어진 여러 피처들 중 일부를 골라 차원 축소 기법 중 하나인 ICA(Independent Component Analysis)를 활용했습니다. 그렇게 해서 선정한 피처들을 한 개의 수치형 피처로 변형했고, 그 후에는 날짜 데이터의 수치형 변환, 이상치 제거와 one-hot encoding 등 추가적인 기법들을 적용해서 데이터 전처리를 마무리했습니다.



3. K-Fold + LGBM을 통한 최종 모델 선정

그 후 이전에 만든 validation 데이터와 train 데이터를 이용해서 K-Fold를 진행했습니다. 그리고 각각의 fold(겹)를 LGBM 모델을 통해서 학습시켰는데, 그중 가장 성능이 좋았던 모델과 fold를 선택했습니다. 그리고 해당 데이터를 통해 최종적으로 test 데이터를 예측했고, Private Score 기준 RMSE 50,130,000으로 1위를 기록했습니다.



‘통계청김웅곤+양경성+민성욱EDA김현우’ 팀이 작성한 코드를 보면, 아파트의 가격을 예측하기 위해 최대한 많은 데이터를 수집하여 파생변수를 생성하고, 유의미한 데이터를 확보하기 위해서 전처리에 많은 노력을 기울인 것을 알 수 있는데요. 이를 통해서 금융 데이터를 다룰 때에는 모델을 활용하는 지식뿐만 아니라, 데이터가 현실의 금융 정보를 반영하도록 하는 센스(!)도 필요한 것을 알 수 있었습니다! 🙌


> 더 자세한 솔루션은 여기에서! <




(광고) 신한 AI와 함께하는 금융 서비스 아이디어 경진대회를 소개합니다! 💡

금융 아이디어


아파트 실거래가 예측 솔루션, 인상 깊게 보셨나요?

금융 분야는 우리 생활과 직결되는 만큼 언제나 흥미로운 분야 중 하나죠!


이번엔 인공지능을 활용해서 실제 금융 사업에 사용될 서비스를 기획해 보세요!

총 상금 500만 원, 대회 우승 시 신한 AI 인턴 채용 기회까지! 🙋


(이미지를 클릭하면 더 자세한 내용을 확인하실 수 있습니다!)



🤓 논문 미리 보기

GPT-3


지난 3호 뉴스레터에 이어 이번 5호에서도 논문 미리보기가 찾아왔습니다! 이번 ChatGPT4의 출시와 함께 GPT-4 논문도 나왔죠! GPT-4를 리뷰하기에 앞서, 한 발 한 발 차근차근 이전 연구를 되짚어 보고자 GPT-3를 먼저 준비했어요! (🗣️ GPT-4 리뷰가 기대된다면 다다음 뉴스레터도 주목!)

(위 이미지를 클릭하면 논문 원본을 확인하실 수 있습니다.)

본 내용은 ChatGPT를 적극 활용하여 작성되었음을 알려 드립니다!


🧐 GPT란?

GPT(Generative Pre-Trained Transformer) 시리즈는 OpenAI에서 발표한 대규모 언어 모델군의 개발에 관한 연구 논문입니다. 2가 있다면 1도 있겠죠?

GPT는 1, 2, 3의 총 세 가지 시리즈가 나와 있어요. GPT 논문 시리즈는 자연어 처리에 관한 새로운 가능성을 열고, 혁신을 선도했다는 점에서 의의가 매우 큽니다!



서론

GPT-3 이전 연구에서는 적은 양의 예제 데이터로 다양한 task를 처리하기 어렵다는 한계가 있었습니다. 이러한 문제를 극복하기 위해 meta-learning 연구와 모델 크기를 키우는 방안이 계속해서 연구되었는데요.

GPT-3에서는 기존에 사용되던 Fine-Tuning(FT) 방식 대신 Few-Shot(FS), One-Shot(1S), Zero-Shot(0S) 학습 방법을 적용하여 성능을 비교/평가했습니다.

먼저, 기존에 사용되던 FT 방식은 미리 학습되어 있는 모델을 가져와 원하는 task에 맞게 적응시키는 방식입니다. 이를 위해서는 대량의 라벨링 데이터가 필요한데요. FT 방식의 장점은 성능이 좋다는 것이지만, 대형 데이터셋이 필요하고 일반화에 실패할 가능성이 있다는 단점이 있습니다.

FS 방식은 적은 양의 라벨링 데이터로 학습이 가능한 방식입니다. FS 방식에는 작업별 데이터 필요성이 크게 감소하기 때문에 좁은 범위를 학습할 가능성이 줄어든다는 장점이 있는데요. 다만 FT 방식보다는 결과가 좋지 않을 수 있으며, 소량의 작업별 데이터가 필요하다는 단점이 있습니다. 좀 더 구체적으로 예를 들어 보자면, 번역 작업 시엔 k개의 영어 문장과 그에 대한 번역 문장을 제공함으로써 학습이 이루어지는 것입니다!

1S 방식은 단 하나의 예시만으로 모델을 학습시키는 방법입니다. 나머지는 FS와 동일한데요. 몇 가지 작업에서는 사람과 의사소통하는 것과 가장 비슷한 방식으로 동작합니다. 단, 1S 방식은 예시 하나만으로 학습하기 때문에 결과가 일반적으로 좋지 않을 수 있습니다.

마지막으로, 0S 방식은 모델이 이전에 학습하지 않은 새로운 작업을 수행할 수 있도록 하는 방식입니다. 즉, 모델이 언어의 일반적인 속성을 학습하고, 특정 도메인이나 작업에서 요구되는 추가 정보를 입력으로 제공하여 새로운 작업에 대한 학습 데이터 없이 이를 일반화하여 작업을 수행할 수 있게 하는 것인데요. 가장 편리한 방식이긴 하지만, 세팅이 어려울 수 있다는 단점이 존재합니다. 일부세팅은 사람들이 태스크를 수행하는 방식과 가장 가깝다는 특징도 있습니다.


본론

뉴스레터 3호의 논문 미리보기에서 잠시 언급했던 바와 같이, GPT-3는 GPT-2와 같은 구조의 모델을 사용했습니다. GPT-3에서는 해당 모델에 8가지 크기의 모델을 훈련시켰으며, 1,750억 개의 매개 변수를 사용하였습니다.


Training Dataset

훈련 데이터셋에서는 거의 1조 개의 단어를 사용했으며, 퀄리티를 높이기 위해 3단계로 나누어 훈련을 진행했습니다.

먼저 CommonCrawl 데이터*에서 고품질의 참조 말뭉치(Corpus)와 유사도 기반으로 필터링하고(1단계), 문서 수준에서 중복을 제거한 후(2단계), 다양성을 늘리기 위해 고품질의 말뭉치를 추가하였습니다(3단계).

이렇게 훈련을 진행하는 동안 더 높은 품질의 데이터셋이 샘플링되었고, 과적합이 감소되었습니다.


(*CommonCrawl 데이터: 인터넷에서 수집된 대규모 오픈 데이터셋 중 하나로, 전 세계의 웹 페이지에서 수집한 웹 크롤링 데이터를 포함하고 있습니다.)


결론


총평

여러 테스트에서 GPT-3 모델의 성능이 검증되긴 했지만, 문장이 길어지는 경우엔 일관성을 잃고 모순된 문장을 생성하는 등의 한계가 있었는데요. 연구자들은 이를 극복하기 위해 양방향 아키텍처나 잡음 제거와 같은 학습 방식이 필요하다는 의견을 남겼습니다.

또한 비디오나 물리적 상호 작용과 같은 경험적 데이터가 부족하여 문맥적 어려움이 있을 수 있다는 점, 사전 훈련 시 다양한 데이터를 학습하지 못해 샘플의 효율성이 낮다는 점, 데이터의 편향성 때문에 고정관념이나 편견이 있는 콘텐츠를 생성할 수 있다는 가능성 또한 한계점으로 지적되었습니다.


의의

본 논문은 1,750억 개의 매개 변수를 사용하는 매우 큰 규모의 언어 모델 연구 결과를 제시했는데요. 이러한 대규모 언어 모델이 일반적인 언어 개발에 매우 중요한 요소가 될 수 있음을 시사했다는 점에서 의의가 있습니다.




리뷰 한마디!

🍖 SH 님(DS)

이번 연구에서는 모델 스스로 학습하는 Zero-Shot 방법이 가장 인상적이었는데요. 모델이 데이터만으로 스스로 학습할 수 있다니 정말 놀랍습니다. 그동안 라벨링하느라 고생이 많았는데, 앞으로 이런 일이 줄어든다면 아주 좋을 것 같습니다. 또한 범용적으로 이 모델을 사용할 수 있다는 점도 인상적인데요. 그동안은 태스크(Task)별로 모델을 개발했어야 했는데, GPT-3를 이용한다면 개발 업무가 크게 줄어들 수 있을 것 같아요!




이번 논문 미리보기는 어떠셨나요? 궁금한 논문이나, 다른 데이커들에게 추천하고픈 콘텐츠가 있다면 아래 뉴스레터 피드백을 통해 알려 주세요!

검토 후, 이후 뉴스레터 콘텐츠 기획에 참고할 수 있도록 하겠습니다! (간단한 감상평까지 함께 남겨 주시면 금상첨화입니다…☘️)

> 피드백은 바로 여기서! <




🍯 ChatGPT 꿀팁 실험


얼마 전 종료된 월간 데이콘 ChatGPT 대회의 코드 공유 게시판에는 ChatGPT 프롬프팅의 성능을 향상시킬 수 있는 여러 팁들이 올라왔는데요! 게시판에서 이 팁들을 흥미롭게 읽던 와중, 문득 ‘이 팁들을 적용하지 않은 버전과 적용한 버전을 비교해 보면 어떤 결과가 나올까?’라는 의문이 들었습니다. 그래서 기획된 이번 콘텐츠! ‘ChatGPT 꿀팁 실험’입니다. 🥸


우선 데이커분들의 몇몇 팁들을 큰 가닥으로 묶어 보자면,

  1. 친절한 답변이 나올 때까지 첫 답변 반복해서 받기
  2. 사전에 역할을 부여하고, 상황에 대한 충분한 설명 제공하기
  3. 정중하게 물어보기, 칭찬하기
  4. 질문은 작은 단위로 쪼개서 물어보기
  5. 답변이 도중에 끊어지는 경우, 이전 내용을 복사해서 계속해 달라고 요청하기


이렇게 대략 5가지로 정리해 볼 수 있을 것 같네요!

자, 그럼 ‘월간 데이콘 ChatGPT 활용 AI 경진대회’의 베이스라인 코드를 생성한 프롬프트 일부와 비교해 위의 팁들을 적용했을 때 어떻게 다른 답변이 나오는지 직접 확인해 보도록 하겠습니다!

(뉴스레터에서는 베이스라인 프롬프트를 한글화해서 진행하였으며, GPT-3.5 버전을 사용했음을 알려 드립니다.)


먼저 기본 버전입니다!


🧑‍💻 난 AI 프로젝트를 수행해야 해. 지금부터 너에게 내가 해야 하는 프로젝트에 대해 설명할 거야.

🤖 네, 좋아요! 어떤 AI 프로젝트를 수행해야 할지 설명해주세요.


🧑‍💻 데이터는 이렇게 세 부분으로 나뉘어.
1. Training data: train.csv 2. Test data: test.csv 3. Submission file: sample_submission.csv
train.csv 파일은 id, text, label의 3개 열로 구성되어 있고, test.csv 파일은 id, text 2개 열로 구성되어 있어. sample_submission.csv 파일은 id 열과 label 열로 구성되어 있어.

🤖 네, 이해했습니다. 데이터는 train.csv, test.csv, sample_submission.csv 총 3개의 파일로 구성되어 있고, train.csv 파일은 id, text, label 3개의 열(column)로 구성되어 있으며, test.csv 파일은 id, text 2개의 열로 구성되어 있습니다. 그리고 sample_submission.csv 파일은 id와 label 2개의 열로 구성되어 있습니다. 이 부분까지는 이해가 되었습니다. 이제 어떤 프로젝트를 수행해야 하는지 설명해주시겠어요?


🧑‍💻 레이블은 총 8개로 구성되어 있는데, text 열은 뉴스 기사 데이터로 이루어져 있어. countvectorizer를 기반으로 text 데이터를 전처리하고, lightgbm 모델로 분류하기 위한 코드를 작성해 줘.

🤖 네, 이해했습니다. 프로젝트 목표는 8개의 레이블로 분류된 뉴스 기사 데이터를 분류하는 모델을 만드는 것이고, 전처리를 위해 countvectorizer를 사용하고, 분류 모델로는 lightgbm을 사용할 예정이군요. 이를 위한 코드를 작성해드리도록 하겠습니다. 추가로, 데이터셋을 로드하고, 필요한 라이브러리를 import하는 코드는 이미 준비되어 있다고 가정하겠습니다.

GPT


생각보다 간단한 대화만으로도 코드가 하나 뚝딱 완성되었네요! 이번엔 그럼 꿀팁들을 적용하여 프롬프트를 작성해 볼까요?


🧑‍💻 안녕, GPT! 난 AI 프로젝트를 수행해야 해. 지금부터 너에게 내가 해야 하는 프로젝트에 대해 설명해 주고 도움을 받고 싶어.

🤖 안녕하세요! 저는 AI 프로젝트 수행에 대해 도움을 드리기 위해 준비되어 있습니다. 어떤 프로젝트인지 자세히 알려주세요. 제가 최대한 도움을 드리겠습니다!


🧑‍💻 좋아, 고마워! 주어진 데이터셋으로 뉴스 기사의 카테고리를 분류하는 AI 모델을 만드는 게 이번 프로젝트의 목표야. 이제 프로젝트에서 사용할 데이터에 대해 알려줄게.

🤖 네, 좋아요! 프로젝트에 사용할 데이터셋이 어떤 것인지 알려주세요. 어떤 형식으로 데이터가 구성되어 있는지, 어디서 가져왔는지 등에 대한 정보를 알려주시면 더욱 도움이 될 것 같습니다.


🧑‍💻 데이터는 이렇게 세 부분으로 나뉘어.
1. Training data: train.csv 2. Test data: test.csv 3. Submission file: sample_submission.csv train.csv 파일은 id, text, label의 3개 열로 구성되어 있고, test.csv 파일은 id, text 2개 열로 구성되어 있어. sample_submission.csv 파일은 id 열과 label 열로 구성되어 있어.

🤖 네, 이해했습니다. 데이터셋이 train.csv, test.csv, sample_submission.csv 세 부분으로 나뉘어져 있군요. train.csv 파일은 id, text, label 3개 열로 구성되어 있고, test.csv 파일은 id, text 2개 열로 구성되어 있습니다. 그리고 sample_submission.csv 파일은 id 열과 label 열로 구성되어 있는 것이군요. 이 정보를 바탕으로 모델을 만들어 뉴스 기사 카테고리를 분류하는 데 도움을 드리겠습니다.


🧑‍💻 레이블은 총 8개로 구성되어 있는데, text 열은 뉴스 기사 데이터로 이루어져 있어. 먼저, countvectorizer를 기반으로 text 데이터를 전처리하는 코드를 작성해 줘!

🤖 네, 전처리 코드를 작성해드리겠습니다. CountVectorizer를 사용하여 텍스트 데이터를 전처리하겠습니다. 또한, 각 단어를 소문자로 변환하고, 불용어를 제거하겠습니다. 이렇게 작성하면, CountVectorizer를 사용하여 train 데이터와 test 데이터의 text 열을 벡터화할 수 있습니다.

GPT

🧑‍💻 훌륭해! 이제 전처리한 데이터를 lightgbm 모델로 분류하기 위한 코드를 작성해 줘.

🤖 네, LightGBM 모델로 분류하기 위한 코드를 작성해드리겠습니다. 우선, 전처리된 데이터와 레이블 데이터를 가져와서 모델을 학습시키겠습니다.

GPT

🤖 위 코드에서는 LightGBM 모델을 학습시키기 위해, 학습용 데이터와 검증용 데이터로 분리합니다. 그리고, LightGBM의 하이퍼파라미터를 설정하여 모델을 학습시키고 검증합니다. 마지막으로, 학습된 모델을 반환합니다. 이제 학습된 모델을 사용하여 test 데이터를 예측해보겠습니다.

gpt

🤖 위 코드에서는 학습된 LightGBM 모델을 사용하여 test 데이터를 예측하고, 예측 결과를 DataFrame으로 변환합니다. 마지막으로, submission.csv 파일로 저장합니다.
이렇게 작성하면, 전처리된 데이터를 LightGBM 모델로 분류할 수 있습니다.


답변이 도중에 끊어지는 경우는 실험해 보지 못했지만, 사전에 프로젝트의 목표를 알려 주고, 코드를 요청할 때 한 단계 한 단계 작은 단위로 쪼개어 질문해 보았어요. 그리고 가장 처음 GPT에게서 코드를 받을 때 좀 더 친절한 답변이 나올 때까지 반복해서 ‘Regenerate response’를 사용했습니다! 그리고 중간중간 폭풍 칭찬까지, 나름대로 최선을 다해서 팁을 녹여 보았는데요!


두 가지 다 결과적으로 같은 코드이긴 하지만, 하이퍼파라미터 값을 구체적으로 제시해 주었다는 점에서 팁을 적용하니 좀 더 친절한 코드가 나온다! 라고 볼 수 있을 것 같습니다.

더 복잡한 작업을 할 때는 이런 작은 차이가 생각보다 더 큰 변곡점이 될 수도 있겠죠?

그밖에 더 좋은 팁이 있다면 언제든지 댓글 또는 뉴스레터 피드백을 통해 공유해 주세요! 😄


> 더 많은 꿀팁 보러 가기! <




🤩 데이콘 지금은


데이크루 절찬 진행 중! 😎

데이크루 5기, 다들 열심히 참여하고 계신가요?

다양한 주제를 가진 글들이 토크 게시판에 활발히 올라오고 있는데요! 아직 참여하지 않으셨다면, 다양한 AI 툴을 활용해 콘텐츠를 만들어 공유해 보세요!

상위 20명에겐 기프티콘☕️도 증정된다는 사실!

(이미지를 클릭해 자세한 내용을 확인하세요!)



ChatGPT 문제 기반 학습 오픈! 🧑‍💻

ChatGPT를 활용하여 데이터 분석 과제를 해결하는 ChatGPT 문제 기반 학습 무료 오픈되었습니다!

지금 바로 체험해 보세요!

(이미지를 클릭하면 학습 페이지로 이동됩니다!)



에디터 한마디 💬


요즘 데이콘 팀이 빠져 있는 인간 사료(!)를 소개합니다. 😋

혜성처럼 등장해서 데이콘 팀 모두의 입맛을 사로잡아 버린 이것… 드셔 보신 데이커 계신가요?

방심하면 이성을 잃고 순삭할 수 있으니 주의하세요!


이번 뉴스레터는 간식을 애정하시는 DS 팀원분의 한마디로 마무리하겠습니다!


YT 님 (😷) : 열심히 먹은 덕에 혈당 수치가 오르고 있습니다…!

로그인이 필요합니다
0 / 1000
엣지
2023.04.17 17:33

에낙...은 위험합니다. 계속 먹혀요. 
여러가지 소식 감사합니다.

DACON.YC
2023.04.18 09:19

이 간식 이름이 에낙이군요! 😲
다음 뉴스레터도 알차게 채워서 오겠습니다! 감사합니다!