GPT를 이용해 정보처리기사나 빅데이터분석기사를 획득할 수 있을까?

#9기임팩트

개요


GPT를 비롯한 LLM이 코드 짜는 능력에 있어서 어마어마하다는 사실은 이미 널리 알려져 있습니다. 물론 특정 태스크가 주어졌을 때, 실무자들이 직접 짜는 수준까지는 미치지 못하지만, 그것을 보조해주거나, 혹은 입문자에게 필요한 코드 정도는 너무나도 잘 짜주고 있죠. (약간 번외로, GPT는 코드 데이터를 사전 학습하면서 다른 도메인에서의 추론 능력 역시 일취월장했습니다. 창발이라고도 하죠)

그렇다면, 코딩 입문자들이 주로 따는 정보처리기사나, 빅데이터분석기사 획득을 위해서 LLM을 활용해 볼 수 있을까요? 너무나도 당연히 ‘OK’이며, 효율적인 학습을 위해서는 ‘AI를 이용해 영어 점수 획득하기’와 마찬가지로 어느 정도 튜닝이 필요합니다.

추가적으로, 영어 도메인과는 달리 ‘빅데이터분석기사’나 ‘정보처리기사’의 실기 문제는 사전학습이 되어 있지 않기 때문에, 특정 유형의 문제를 제시해달라는 유형은 더욱 더 많은 튜닝이 필요합니다. 이번 글에서는 AI를 이용해 ‘빅데이터 분석기사의 실기 문제’를 효율적으로 풀어볼 수 있는 방안에 다뤄보겠습니다.


AS-IS


현재 코딩과 관련된 기사 자격증을 공부하는 방법은 1) 책을 통한 독학, 2) 인터넷 강의 가 대표적입니다. 이러한 방법들은 다음과 같은 문제점이 있습니다.

1) 특정 문제에 대한 하나의 모범답안만이 존재한다.

코드에는 다양한 variation이 있으며, 하나의 방법만 계속 외우고 진행하다 보면 새로운 유형의 문제가 나오거나, 푸는 방법이 다른 문제가 나왔을 때 풀 수 없게 됩니다.

2) 학습자가 직접 짠 코드에 대한 피드백이 전혀 불가능하다.

코드를 짤 때 가장 대표적인 문제는, 본인이 만든 코드가 작동을 안 할 때, 혹은 성능이 나쁠 때 왜 그런지, 어떻게 해결해야 하는 지 알기 매우 힘들다는 점입니다.

3) 책이나 강의에서 제공하고 있는 답안에 이해가 가지 않는 부분이 있어도 물어 볼 수 없다.

예를 들어, 데이터 전처리 범주에서 string 객체를 DateTime 객체로 바꿔야 문제가 풀리는 부분이 있다고 할 때, 이런 부분을 책에서 다뤄주는 경우는 별로 없습니다. 잘해봐야 해설에 2~3줄 추가되어 있는 경우가 많죠. 이런 객체를 왜 변환해줘야 하는지, 변환하기 위해서는 어떻게 해야 하는지 등은 알기 어렵습니다.

4) 양이 매우 적고, 범주가 한정적인 모의고사를 풀 수 밖에 없다.

코딩 실력을 늘리기 위해 제일 좋은 방법은 다양한 문제를 최대한 많이 풀어보는 것 입니다. 하지만 한정적인 리소스 상, 책이나 인강에서 제공해주는 모의고사는 양이 매우 적어 기출문제를 반복하는 것이 대부분의 학생들이죠.

5) 가격이 상대적으로 비싸다.

일반적인 인강의 경우 10만원 언저리의 가격, 책은 5만원 언저리입니다. 결코 싸다고 보기는 어려운 수준이죠.


Solution by chatGPT


상기한 문제점들을 우리는 생성형 AI(chatGPT)를 통해 해결할 수 있습니다. 파운데이션 모델 자체가 코드 추론 능력, 리뷰 능력 등이 매우 뛰어나며, 다양한 데이터 분석 기법과 라이브러리에 박학다식하기 때문입니다. 단, 효율적인 빅데이터분석기사 실기 취득을 위해선 오히려 이러한 박학다식함을 줄여줄 필요가 있습니다.

예를 들어, 빅데이터분석기사 실기 시험장에서 문제를 풀 때, 1) 하이퍼파라미터 튜닝을 최소화하면서, 2) 성능자체가 우월하면서, 3)시험 모듈 위에서 시간 내에 풀 수 있는 머신러닝 기법은 한정되어 있습니다. RandomForest나 DecisionTree 등이 대표적이죠. (실제로는 거의 RandomForest만 사용하면 됩니다.)

Feature Engineering이나 validation method, 전처리 기법 역시 고급진 방법이나 다양한 방법까지 알 필요가 없죠. 그럼에도, 시험에서 주로 요구하는 몇 가지 기법에 대해서는 무조건 알고 있어야 합니다.(예를 들면 원-핫 인코딩이나, 라벨인코딩 등)

만약, 빅데이터분석기사 취득에 GPT를 이용한다면,

1) 특정 문제에 대한 다양한 해결 방법을 익힐 수 있고,

2) 내가 짠 코드가 왜 작동되지 않는지, 혹은 왜 성능이 떨어지는 지에 대해 피드백 받을 수 있으며,

3) 문제에 대해 이해가 가지 않는 부분이나, 문제를 풀 때 필요한 개념에 대해 실시간으로 물을 수 있고,

4) 기출문제와 유사한 문제에 대해 끊임없이 풀어 볼 수 있다는 장점이 있습니다.


Examples - 작업형 2번 모범답안 받기


작업형 2번 문제는 특정 데이터가 주어졌을 때, 머신러닝 기법을 이용해 y값을 예측하는 문제입니다. 예를 들어,

난방 부하 단계를 예측해주세요!

예측할 값(y): Heat_Load (Very Low, Low, Medium, High, Very High)

평가: f1-macro

data: train.csv, test.csv

제출 형식: result.csv파일을 아래와 같은 형식으로 제출

위와 같은 형식이며, 일반적으로 라이브러리 호출 - 전처리 -모델 구성 - 모델 평가 - csv 생성 - 제출 의 정형화된 workflow를 따릅니다.

이러한 방식을 따르며, 구체적인 설명을 요구하기 위해서 아래와 같은 Instruction 을 제시했습니다.

Instruction

## Role ##
너는 빅데이터 분석기사라는 시험을 매우 구체적으로 가르쳐주는 강사야. 내가 준 문제와 데이터를 보고, instruction을 참고하여 문제를 풀어줘. 코드를 모두 작성해준 이후에는 왜 해당 코드를 짰는지 구체적으로 설명해줘.

## instruction ##
1. 라이브러리 불러오기 - 데이터 전처리 - 모델 구성 - 모델 평가 - csv 생성 의 구조로 코드를 짜줘.
1-1. 주석으로, 해당 코드에 대한 설명을 자세하고 구체적으로 달아줘. 예를 들면, 데이터 전처리 과정에서, 범주형 변수는 기계 학습 데이터로 적합하지 않으므로, 수치형 변수로 변환하기 위해  원핫인코딩 해줘야 합니다.와 같이 달아줘.
1-2. 또한 데이터를 분석하기 이전에 데이터 자체에 대한 간단한 설명과 무엇을 해야하는지 나타내줘.
2. 데이터 전처리 과정은 원핫인코딩과 라벨인코딩 두 가지 방법을 모두 보여주고, 코드 상에서는 하나를 주석 처리 해줘. 단, 모델 검증을 위한 데이터셋 분할 과정은 데이터 전처리 과정에서 나타내줘.
 3. 모델 구성 과정은 RandomForest와 DecisionTree 만을 사용해서 진행해주고, 상대적으로 성능이 낮은 모델은 주석 처리 해줘.
4. 모델 평가는 가장 단순하고 간단한 기법을 이용해줘.
5. 예측 값으로 csv 생성하는 과정까지 정확하게 설명해줘.
6. 모든 과정은 한국어로 설명해줘.

위와 같은 제시에, 아래와 같은 답변을 내놓았습니다.

Answer


import pandas as pd

# 데이터 불러오기
train_data = pd.read_csv('/mnt/data/energy_train.csv')
test_data = pd.read_csv('/mnt/data/energy_test.csv')

# 데이터의 첫 5행을 출력하여 구조 확인
train_data.head(), test_data.head()
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, LabelEncoder

# 원-핫 인코딩을 위한 준비
onehot_encoder = OneHotEncoder(sparse=False)

# 라벨 인코딩을 위한 준비
label_encoder = LabelEncoder()

# 범주형 변수 식별
categorical_features = ['Height', 'Orient', 'Roof']

# 원-핫 인코딩 적용 예시 (실제 코드에서는 이 부분을 활성화)
# train_data_onehot = pd.get_dummies(train_data, columns=categorical_features)
# test_data_onehot = pd.get_dummies(test_data, columns=categorical_features)

# 라벨 인코딩 적용 (원-핫 인코딩 대신 이 방법을 사용하겠습니다)
for feature in categorical_features:
    train_data[feature] = label_encoder.fit_transform(train_data[feature])
    test_data[feature] = label_encoder.transform(test_data[feature])

# 타겟 변수 'Heat_Load'를 라벨 인코딩
train_data['Heat_Load'] = label_encoder.fit_transform(train_data['Heat_Load'])

# 데이터셋 분할: 특성과 타겟 변수 분리
X = train_data.drop('Heat_Load', axis=1)
y = train_data['Heat_Load']

# 훈련 세트와 검증 세트로 분할 (비율: 80% 훈련, 20% 검증)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

X_train.head(), y_train.head()
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import f1_score

# 모델 초기화
random_forest = RandomForestClassifier(random_state=42)
decision_tree = DecisionTreeClassifier(random_state=42)

# 모델 학습
random_forest.fit(X_train, y_train)
# decision_tree.fit(X_train, y_train) # 주석 처리: 성능 비교 후 결정

# 예측
y_pred_rf = random_forest.predict(X_val)
# y_pred_dt = decision_tree.predict(X_val) # 주석 처리: 성능 비교 후 결정

# 성능 평가 (f1-macro)
f1_score_rf = f1_score(y_val, y_pred_rf, average='macro')
# f1_score_dt = f1_score(y_val, y_pred_dt, average='macro') # 주석 처리: 성능 비교 후 결정

f1_score_rf#, f1_score_dt
# 테스트 데이터에 대한 예측 수행
test_pred = random_forest.predict(test_data)

# 라벨 인코딩된 예측값을 원래의 범주로 변환
test_pred_labels = label_encoder.inverse_transform(test_pred)

# 결과를 DataFrame으로 변환
result_df = pd.DataFrame(test_pred_labels, columns=['pred'])

# 결과 CSV 파일로 저장
result_path = '/mnt/data/result.csv'
result_df.to_csv(result_path, index=False)

result_path
  • 실제 시험에서 시험자가 제출해야 하는 코드와 거의 100%에 유사하게 코드를 짜주는 모습을 볼 수 있습니다.

    • 단, 결측치 처리에 대한 지시가 들어가지 않아, 해당 부분은 #instruction 상에서 해결되어야 할 문제입니다.

    • instruction을 줄이고 더욱 더 고도화된 모범 답안을 도출하기 위해서는 실제 모범 답안을 하나 집어 넣어주기만 하면 됩니다.


Example 2 - 모르는 부분 질문하기


일반적인 수험자들이 잘 이해가지 않을만한,

for feature in categorical_features:
    train_data[feature] = label_encoder.fit_transform(train_data[feature])
    test_data[feature] = label_encoder.transform(test_data[feature])

부분에 대해서 왜 fit_transform과 transform의 차이가 있는 지 질문해보겠습니다.

Answer

  • 제가 GPT를 사용하면서 받은 가장 ART적인 답변이네요. 사람에게 물어도 이렇게 친절하고 쉽게 설명해주는 사람은 별로 없을 듯 합니다.

  • 이와 같이, 코드 상 모르는 부분이나 개념 상 모르는 부분에 대해 매우 친절하게, 개인화된 답변을 제공해줄 수 있습니다.


Example 3 - 자주 실수할 수 있는 부분에 대한 remind


Example 1의 instruction에서

사람이 자주 실수 할 수 있는 부분에 대해 설명해줘. 시험 보기 직전에 확인할 수 있도록 정리형태로 나타내줘.

라는 부분을 추가하면,

  • 위와 같이 틀리기 쉬운 부분에 대해 정리해줍니다. 저 같은 경우도 분석 코드를 제출할 때 4, 5번에 대해 자주 틀리는데, 이런 부분에서 align이 잘 맞네요.

  • 정리 뿐만 아니라 설명 역시 일목요연합니다. 관련 인강에서는 저 5가지를 하나의 챕터로 사용하는 경우도 있는데 이렇게 깔끔하게 보는 것이 시간적/금전적으로 큰 이득입니다.

Conclusion


  • 지금 당장에서라도 빅데이터 분석기사, 정보처리기사 실기는 학원을 다니지 않고 GPT의 도움만 받아 합격선 점수까지 올리는 것이 가능합니다.

  • 내가 모르는 부분, 문제에 대한 모범 코드, 실수 하기 쉬운 부분 등을 잘 캐치해주기 때문에, 시험 준비용으로 매우 완벽합니다.

    • 제가 제공한 Example 이외에도, 기출 문제와 유사 문제 만들기, 답변 고도화 하기, 내 답변 피드백 받기 등이 가능하며, 이는 “모범 답안 주기, 프롬프트 고도화(영문화는 필수입니다), 기출 문제 제공” 등을 통해 매우 쉽게 구현 가능합니다.

  • 코드 부분뿐만 아니라 개념적인 부분에 대해서도 더욱 더 많은 도움을 받을 수 있습니다. 즉 시험 범위에 대한 명세서를 GPT에게 제공한다면, 해당 부분의 개념을 매우 상세하게 예시를 들어 설명해줍니다.

2
4개의 답글

👉 이 게시글도 읽어보세요