brunch

C++ C학점이 코딩을?

새로운 모험은 언제나 흥미진진하다.

by Jay

대한민국이 월드컵 4강에 올라 '대한민국~'을 외치던 2000년대 초반에도 대학교에서 코딩을 배웠다. 당시에는 대학교에 가서야 코딩이라는 것을 배웠다. 그러나 요즘은 유치원에서부터 코딩을 배우기 시작한다고 한다. 20년 만에 대학생이 배우던 코딩을 유치원생이 배우고 있게 되었다. (물론 당시 C++을 배우던 시기에는 한 글자 한 글자 타이핑을 통해 코딩을 했지만 요즘 아이들은 터치스크린을 통해 사전에 코딩된 블록을 조합하고 순서를 변경함으로써 코딩을 경험한다. 이런 코딩은 스마트볼 같은 장난감에 블루투스 통신을 통해 장애물을 건드리지 않고 시작점부터 결승선까지 도달하는 묘기를 부리게 한다.)


이와 더불어 이미 또 다른 코딩의 시대가 열리고 있다. 제목에서와 같이 대학교 2학년 때 C++을 C학점 받았던 사람이 코딩에 재미를 붙여서 잠자는 시간을 줄여가며 눈이 벌게져서 코딩을 수정하고 있다. 지금도 실제 코딩의 실력은 대학교 시절과 별반 차이는 없다고 생각한다. 그런데 데이터를 다듬고 여러 모델(RNN, LSTM, CatBoost, RF 등)을 이용하여 예측값을 도출하고 있다. 그리고 실제 데이터와 예측값과의 간극을 줄이기 위해 노력하고 있다. 그리고 예측된 결과 값이 올바른지 여러 선행연구를 통해 검증하는 연구를 진행하고 있다.


이런 예측 모델을 만드는 순서는 대략 아래와 같다.

1) 데이터를 수집한다.

2) 데이터를 다듬고(결측치 처리, 표준화 등) 모델이 데이터를 사용할 수 있도록 데이터프레임(dataframe)으로 만든다.

3) y=f(x)에 사용할 x변수와 y변수를 지정한다. 여기에서 y값이 예측할 변수가 된다.

4) 여러 모델을 활용하여 y의 예측값인 y' 값을 도출하고 평가지표(RMSE, MAE, MSE, MAPE, R2 등)를 통해 얼마나 예측값이 실제 값과 유사한지 평가를 한다.

5) 그리고 여러 방법을 동원해서 평가지표를 좋게 만들기 위해 노력한다.

6) 예측력이 좋은 y=f(x) 모델이 만들어지면, x값을 입력하여 y'값을 도출하고 실제 상황에 적용해 본다.


처음에는 익숙하지 않지만 반복하다 보면 어느새 익숙해지고 아래와 같이 여러 평가지표가 개선되는 것을 경험하게 된다. (R2를 0.31 → 0.66 → 0.80 → 0.92로 개선시켰다.) 그리고 코딩에 푹 빠져 있는 자신을 마주하게 된다.

1.PNG
2.PNG
3.PNG
4.PNG


C++언어 C학점을 받았던 학생이라도 복잡한 코딩은 이제 아래의 방법을 참고하여 ChatGPT에게 맡기면 수백 줄의 코드를 손쉽게 얻을 수 있다.

1) ChatGPT에게 얻고자 하는 코딩을 작성해 달라고 구체적으로 설명을 한다. 어떤 데이터를 활용할 것이고 이 데이터를 이용하여 어떤 지표를 예측하기 원하는지 등을 알려준다.

2) 1)의 코딩에 준비된 데이터프레임을 불러들인다.

3) 코드를 돌려본다. (런, Run을 시켜본다.)

4) 에러가 당연히 발생할 것이다. 그러면 에러 메시지를 복사하여 ChatGPT에 입력을 한다.

5) 그러면 ChatGPT는 에러가 왜 발생했는지 알려주고 기존 에러가 났던 코드를 수정해 준다.

6) 다시 새로운 코드를 돌려본다. 그리고 반복한다.


여기에서 가장 중요한 부분은 ChatGPT에게 최대한 상세하고 구체적으로 얻고자 하는 바를 설명해 주는 것이라고 생각된다. 초등학생에게 설명을 해주는 것처럼 하나하나 정확하게 설명을 해줄 때 좋은 결과를 얻을 수 있었다. (덕분에 아내와 아이들과 대화를 할 때에도 상대방을 배려하여 대화하는 습관을 갖게 되었고 보다 깊고 자연스러운 대화를 할 수 있게 된 것은 덤으로 얻었다.)


예측 모델의 R2값이 초기 결과가 0.31이 나왔을 때, ChatGPT에게 이렇게 물어봤다.

나 : CatBoost 모델을 이용하여 y값을 예측하고자 하였는데, R2가 0.31 수준으로 매우 낮다. R2를 더 높일 수 있는 방안이 무엇이 있는지 제시해 줘

GPT : R2를 향상할 수 있는 방법에는 7가지 방법을 제시할 수 있습니다. (1번~7번까지 설명). 제시드린 방법을 적용하여 코드를 수정해 드릴까요?

나 : 제시해 준 방법 중 1, 3, 7번 내용을 적용하여 기존 코드를 수정해 줘


경험상 기존의 코드를 프롬프트에 입력하고 바로 모델의 성능을 높이도록 코드를 수정해 달라고 요청하는 것보다는 모델의 성능을 높일 수 있는 방안을 제시해 달라고 요청을 한 후 그중에 적합한 방안을 선택적으로 적용하여 코드를 수정할 때 보다 효과적으로 모델의 예측성능을 높일 수 있었다.


예전에는 캐글(www.kaggle.com) 등 블로그에서 관련된 코드를 복사하여 코딩을 해왔지만, 이제는 ChatGPT가 관련된 정보를 전부 활용하여 모델의 성능을 높여줄 수 있다. (이렇게 다른 사람이 작성해 놓은 코드를 가져올 경우 변수명, 데이터프레임 이름 등 인터페이스를 전부 손봐줘야 하고 코드는 알파벳 한 글자만 잘못 입력하여도 에러를 발생시키기 때문에 어려움을 겪게 되는데, 반면 ChatGPT는 앞뒤를 전체 고려하여 코드를 수정해 주기 때문에 훨씬 수월하게 접근을 할 수 있는 장점이 있다.)


수년 전에 코딩을 할 수 있는 능력이 없어도 말로 코딩을 할 수 있는 시대가 올 것이라고 하였는데, 지금의 상황을 보면 이미 우리는 그런 시대에 살고 있는 중인 것 같다. 이럴 때 우리에게 필요하고 우리가 해야 하는 것들을 살펴보자. 우선, ChatGPT를 이용하여 코딩을 해보는 경험을 쌓는 것이 중요하다고 생각된다. 어떻게 하는 것인지 알 때 원하는 것을 더 쉽게 구현해 낼 수 있다. 그리고 어떤 데이터로 이 세상에 도움을 줄 수 있는 사람들에게 편리함을 주기 위해서 어떤 모델링을 해야 할까 고민하는 것이 무엇보다 중요하다. 점차 도구(Tool)를 사용하는 능력보다는 이 세상에 어떤 도움을 줄 수 있을까 고민하는 융합적 사고의 과정과 이런 능력을 배양하는 것이 점점 더 중요해지고 있는 것은 분명하다.


대학교 때 C++을 C학점 받았어도 코딩에 도전하며, 여러 데이터를 넣어서 유용한 결과를 도출하기 위해 오늘도 하루를 즐겁게 보내고 있다. 새로운 모험은 언제나 흥미진진하다. 이제는 여러분이 해볼 차례이다.

keyword
작가의 이전글The Brooklyn Tabernacle