-
chatGPT-4로 하는 데이터분석데이터 2024. 1. 7. 14:25
새로운 시대 : DALL E 3에서 그린 그림 chatGPT-4가 나오고 Python이나 R을 몰라도 인공지능을 활용하여 데이터분석을 수행할 수 있다고 한다. 그런 방법을 알려주는 컨텐츠들도 많다. 과연 AI로 분석한다는 것이 어떤 의미인지 어느 정도까지 분석할 수 있다는 것인지, 실제 연구나 논문작성, 업무에 활용이 가능한 것인지 또 어떻게 일을 시켜야 효과적일 것인지 등이 궁금했다. 이글은 현재 가장 뜨거운 chatGPT-4로 간단한 통계 및 데이터분석을 해보면서 AI의 능력은 어디까지인지, 효과적으로 데이터 분석을 시키기 위해서는 어떻게 해야 할 것인지 등에 대해 정리한 글이다.
2024년 1월 초 현재 chatGPT-3.5는 사용자가 원하는 데이터 파일을 첨부하여 분석하기는 어려운 상태이고 복사해서 프롬프트에 붙여 넣기를 통해 분석을 수행해야 하는 제한사항이 있었다. copilot도 데이터 첨부는 가능했으나, 무료 사용자라서 그런지 용량의 제한이 있어 chatGPT-4를 사용하여 데이터분석을 진행하였다.
분석 개요
데이터 선정
palmerpenguins 패키지에 있는 penguins 데이터를 파일로 저장해서 이것을 chatGPT-4(이하 chatGPT)로 업로드 하여 분석하였다.
분석 내용
데이터 분석의 범위는 공통적이고 필수적인 내용 위주로 아래 사항을 대상으로 진행하였다.
가. 데이터 로드, 데이터 구조 파악 및 요약
나. 탐색적 데이터분석(EDA)을 통한 가시화
다. 수치형 변수들의 상관분석 및 가시화
라. 펭귄의 체중을 종속변수로 하는 회귀분석
마. 펭귄의 종류별 체중의 차이 아노바 검정
바. 펭귄의 종류를 분류분석으로 분류하기커스텀 인스트럭션 입력
chatGPT에게 효과적으로 작업을 시키기 위해서는 커스텀 인스트럭션을 통해 두 가지의 기초적인 정보를 제공하는 것이 유리하다. 첫째는 일을 시키는 나에 대한 정보를 제공하는 것이고 둘째는 chatGPT의 역할과 작업 수행 간에 따라야 할 지침을 명확히 제시하는 것이다. 다음은 이번 데이터 분석을 위해 내가 입력한 커스텀 인스트럭션 내용이다.
나에 대한 설명
나는 학생들에 통계분석, 데이터 분석 및 머신러닝 분야를 가르치는 일을 하고 있다.
내가 관심 있는 분야는 빅데이터 분석, 데이터마이닝, 머신러닝, 통계, 생성AI 등이다.
너는 나를 도와 나의 지시에 데이터 분석을 수행하는 조교의 역할을 수행한다.chatGPT에게 요구하는 사항
- 내가 주로 사용하는 데이터 분석 도구는 R이다. 특별한 요청이 없는 한 R을 이용하여 데이터를 분석하라.
- 내가 프롬프트를 통해 지정하는 사항에 대해서 R로 분석을 수행하고, 실행결과 및 결과에 대한 해석을 제시하라. 소스코드는 내가 요청시에 제공한다.
- 단계별로 연속이 되는 지시 사항은 수행 결과들이 파이프라이닝이 되도록 연속성 있게 작업하라.
- 수행 중 애매한 경우에는 내게 질문을 통해 확인한 후 작업하라.
- 모든 결과는 분석 보고서 형태로 제공하고, 한글로 출력하라.
분석 작업의 수행
위에서 제시한 작업지시를 한꺼번에 실행시켜 본 결과, 작업이 중단되고 에러가 발생하는 등 원활하게 수행되지 않았다. 실제 분석 실무나 연구에 chatGPT를 활용할 때도 작업을 분할해서 수행하는 것이 효과적으로 보인다.
분석 작업은 단계별로 수행하였다. 하지만 단계별 작업 수행 결과가 seamless하게 파이프라이닝 되지 않아 원하는 대로 작업이 진행되지 않는 문제점도 있었다. 이 부분 때문에 “코딩을 못해도 데이터 분석을 수행할 수 있다”는 말에는 동의하기 어려웠다. 필요하면 chatGPT가 제시하는 코드를 일부 수정 해가면서 작업을 진행할 필요가 있기 때문이다.아래에 제시하는 내용은 프롬프트에 입력한 내용과 그것을 chatGPT가 수행한 결과이다. 일부 결과는 마크다운으로 편집하기 위해 형식을 수정하였다.
가. 데이터 로드 및 데이터요약
<<프롬프트>>
첨부된 데이터는 palmerpenguins 데이터이다. 데이터를 읽고 구조를 파악한 다음 데이터를 요약하라.
<< chatGPT 수행 결과>>
데이터셋 ‘palmerpenguins’ 에 대한 요약은 다음과 같습니다.
데이터셋 구조:
이 데이터는 주로 펭귄의 신체 측정치와 관련된 정보를 포함하고 있으며, 종(species), 섬(island), 성별(sex) 등의 범주형 변수와 여러 수치형 변수로 구성되어 있습니다. 데이터에는 소수의 결측치가 포함되어 있으며, 이는 분석 과정에서 주의를 요합니다.
총 344개의 관측치와 8개의 변수가 있습니다. 변수들은 다음과 같습니다.
‘species’, ‘island’, ‘bill_length_mm’, ‘bill_depth_mm’, ‘flipper_length_mm’, ‘body_mass_g’, ‘sex’, ‘year’
변수별 요약 통계:
- 부리 길이(bill_length_mm): 평균 43.92mm, 표준편차 5.46mm
- 부리 깊이(bill_depth_mm): 평균 17.15mm, 표준편차 1.97mm
- 날개 길이(flipper_length_mm): 평균 200.92mm, 표준편차 14.06mm
- 체중(body_mass_g): 평균 4201.75g, 표준편차 801.95g
- 연도(year): 범위 2007-2009
- 고유값 개수: 펭귄 종류(species), 섬(island), 성별(sex)은 각각 3, 3, 2개의 고유값을 가집니다.
- 결측치: 부리 길이, 부리 깊이, 날개 길이, 체중에서 각각 2개의 결측치와 성별에서 11개의 결측치가 가 있습니다.나. 데이터 로드 및 데이터요약
<<프롬프트>>
EDA 수행을 위해 펭귄 종류별로 수치형 변수들의 분포를 박스프롯으로 가시화해줘
<< chatGPT 수행결과>>
각 수치형 변수별로 펭귄 종(species)에 따른 분포를 나타내는 박스플롯을 생성하였습니다. 이 박스플롯은 부리 길이(bill_length_mm), 부리 깊이(bill_depth_mm), 날개 길이(flipper_length_mm), 체중(body_mass_g)의 분포를 각각 다른 펭귄 종에 대해 보여줍니다.
다. 수치형 변수들의 상관분석 및 가시화
<<프롬프트>>
펭귄의 체중(body_mass_g)을 종속변수로하고 수치형 변수와 펭귄의 종류(species)를 독립변수로 하는 회귀분석을 수행한다. 회귀분석 결과를 제시하고 해석하라.
<< chatGPT 수행결과>>
수치형 변수들 사이의 상관관계를 분석하고 시각화한 결과입니다. 이 히트맵은 다음 수치형 변수들 사이의 상관계수를 보여줍니다
상관계수는 -1과 1 사이의 값을 가지며, 1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계, 0에 가까울수록 상관관계가 없음을 의미합니다. 예를 들어, 날개 길이(flipper_length_mm)와 체중(body_mass_g) 사이에는 상당히 높은 양의 상관관계가 있음을 알 수 있습니다. 반면, 부리 길이(bill_length_mm)와 부리 깊이(bill_depth_mm) 사이에는 비교적 낮은 음의 상관관계가 존재합니다. 이러한 상관관계는 변수들 사이의 관계를 이해하는 데 유용합니다.라. 펭귄의 체중을 종속변수로 하는 회귀분석
<<프롬프>>
수치형 변수들의 상관관계 분석을 하려고 한다. 상관관계를 분석하고 가시화해줘
<< chatGPT 수행결과>>
펭귄의 체중(body_mass_g)을 종속 변수로 하는 회귀 분석 결과는 다음과 같습니다.
결정계수 (R-squared): 0.847 : 모델이 데이터의 약 84.7%를 설명합니다.
회귀계수 (Coefficients):
Intercept (절편): -4327.3270
bill_length_mm: 41.4684
bill_depth_mm: 140.3284
flipper_length_mm: 20.2410
species_Chinstrap: -513.2470
species_Gentoo: 934.8874
계수의 해석:
bill_length_mm: 부리 길이가 1mm 증가할 때마다 체중이 평균적으로 약 41.47g 증가합니다.
bill_depth_mm: 부리 깊이가 1mm 증가할 때마다 체중이 평균적으로 약 140.33g 증가합니다.
flipper_length_mm: 날개 길이가 1mm 증가할 때마다 체중이 평균적으로 약 20.24g 증가합니다.
species_Chinstrap: Chinstrap 펭귄은 다른 종(species)에 비해 체중이 평균적으로 약 513.25g 감소합니다 (Adelie 펭귄과 비교).
species_Gentoo: Gentoo 펭귄은 다른 종(species)에 비해 체중이 평균적으로 약 934.89g 증가합니다 (Adelie 펭귄과 비교).
통계적 유의성:
모든 변수의 p값이 0.05보다 작아 통계적으로 유의미합니다.
모델의 적합성:
F-통계량의 p값이 매우 낮아, 모델이 통계적으로 유의미합니다.
이 모델은 펭귄의 체중과 여러 수치형 변수 및 펭귄 종의 관계를 잘 설명하고 있습니다.
그러나, 조건수가 높아 다중공선성의 가능성이 있음을 주의해야 합니다.
이는 변수들 간에 높은 상관관계가 있을 수 있음을 나타냅니다.<<추가로 질문 프롬프트>>
그래서 다중 공선성 가능성이 있다면, 어떤 조치를 취해야 하지? 일부 변수를 제거하고 회귀분석을 다시해야 하는가?
chatGPT답 :
다중공선성이 의심되는 경우, 몇 가지 조치를 취할 수 있습니다. 다중공선성은 회귀분석에서 독립변수들 간에 높은 상관관계가 있을 때 발생하며, 이는 모델의 추정치가 불안정해질 수 있음을 의미합니다. 다음은 다중공선성 문제를 해결하기 위한 몇 가지 접근 방법입니다.
상관관계 확인: 먼저, 독립변수들 간의 상관관계를 확인합니다. 높은 상관관계를 보이는 변수들을 식별할 수 있습니다.- 변수 제거: 상관관계가 높은 변수들 중 일부를 모델에서 제거할 수 있습니다. 이는 다중공선성을 줄이는 가장 직접적인 방법입니다. 중요도나 연구 목적에 따라 덜 중요한 변수를 제거합니다.
- 분산팽창요인 (Variance Inflation Factor, VIF) 계산: VIF를 계산하여 다중공선성의 정도를 수치적으로 평가합니다. 일반적으로 VIF가 5 이상이면 높은 다중공선성을 가진 것으로 간주합니다.
- 주성분 분석 (PCA): PCA를 사용하여 독립변수들을 새로운 세트의 직교변수로 변환할 수 있습니다. 이 방법은 데이터의 차원을 줄이는 동시에 다중공선성 문제를 해결할 수 있습니다.
- 정규화 방법 사용: 릿지(Ridge) 또는 라쏘(Lasso) 회귀와 같은 정규화 방법을 사용하여 모델을 피팅할 수 있습니다. 이러한 방법들은 회귀계수에 패널티를 부과하여 과적합과 다중공선성 문제를 완화합니다.
마. 펭귄의 종류별 체중의 차이가 있는지를 검정하는 아노바 분석
<<프롬프트>>
펭귄의 종류별 체중의 차이가 있는지를 검정하는 아노바 분석을 수행하고, 사후검정 까지 수행해줘, 검정을 수행할 때 는 귀무가설과 대립가설이 무엇인지 반드시 포함하라.
<< chatGPT 수행결과>>
ANOVA 분석과 Tukey의 HSD(Post Hoc Test)를 통해 펭귄 종(species)에 따른 체중의 차이를 검정한 결과는 다음과 같습니다.
ANOVA 분석:
귀무가설 (H0): 모든 펭귄 종의 평균 체중이 같다.
대립가설 (H1): 적어도 한 종의 평균 체중이 다른 종과 다르다.ANOVA 결과:
F-통계량: 343.626275
p-값: 2.892368e-82
이 결과는 p-값이 매우 낮으므로 귀무가설을 기각하고, 펭귄 종에 따른 체중의 차이가 통계적으로 유의미하다는 것을 나타냅니다.Post Hoc Test (Tukey의 HSD):
Post Hoc 테스트는 종 간의 체중 차이가 구체적으로 어떻게 다른지를 검정합니다.Tukey의 HSD 결과:
Post Hoc 테스트의 결과를 통해 각 펭귄 종 간의 체중 차이가 어떤지 구체적으로 확인할 수 있습니다. 이 테스트는 ANOVA 분석에서 발견된 유의미한 차이가 실제로 어떤 종 간에 존재하는지를 밝히는 데 도움이 됩니다.주의: Tukey의 HSD 결과가 출력되지 않았습니다. 이는 데이터에 NaN 값이 있거나 다른 기술적 문제로 인한 것일 수 있습니다. 정확한 결과를 얻기 위해 데이터를 다시 검토하고 필요한 경우 전처리 과정을 진행해야 할 수 있습니다.
바. 펭귄의 종류를 분류하는 분류분석
<<프롬프트>>
펭귄의 species 변수를 종속변수로 하는 분류 분석을 하려고 한다. 분류 알고리즘은 knn과 랜덤포레스트로 수행하라. 성능지표는 정확도를 표 형태로 제시하라. 또한 랜덤포레스트 모델로 변수 중요도를 계산하여 그래프로 제시하라.
<< chatGPT 수행결과>>
KNN과 랜덤 포레스트 분류 알고리즘을 사용하여 수행한 펭귄 종 분류 분석의 정확도는 다음과 같습니다.
분류 알고리즘 정확도 (%) KNN 98.0 랜덤 포레스트 97.0 또한, 랜덤 포레스트 모델을 사용하여 변수의 중요도를 그래프로 제시하였습니다.
이 그래프는 각 변수가 펭귄 종을 분류하는 데 얼마나 중요한지를 나타냅니다.
‘bill_length_mm’ (부리 길이)가 가장 중요한 변수로 나타나며, ‘flipper_length_mm’ (날개 길이)와 ‘bill_depth_mm’ (부리 깊이)가 그 뒤를 따릅니다.결론
chatGPT를 비롯한 생성형 AI를 이용하여 다양한 일을 수행하게 될 것이다. 특히 2024년은 엄청난 변화가 예고되어 있는 상황이다. chatGPT를 이용하여 데이터분석을 수행해 본 결과 느낀 점은 다음과 같다.
- AI에게 명확한 상황과 역할을 부여하는 것이 중요하다.
이를 위해 chatGPT의 경우 커스텀 인스트럭션을 구체적으로 제시하는 것이 중요하다. - 기능적으로는 데이터분석과 관련된 어떤 일이든지 수행가능 할 것으로 보인다.
어떤 연구 분야이든 분할하여 세부적인 내용을 AI에게 작업을 시킬 수 있을 것으로 보인다. - 구체적인 코딩 문법이나, 수학적 수식에 대한 이해는 부족해도 문제해결이 가능하지만 정확한 개념을 이해하고 있는 것이 중요하다. AI가 제시한 답을 이해하고 문제를 파악하여 개선시킨 수 있어야 한다
- AI에게 일을 시키는 것은 능력은 매우 뛰어난데, 눈치가 없는 바보 머슴을 데리고 일하는 느낌이다.
AI에게 어떻게 일을 시키느냐가 중요한 시대이다. 자신의 연구, 업무 분야에 효과적인 활용 사례를 연구하고 공유하는 것이 중요하다. chatGPT의 도움을 받아서 데이터분석을 수행해도 결국 보고서를 구상하고 논리를 전개하면서 보고서를 작성해야 하는 부분은 사람의 몫이다.
요즘 하루가 다르게 AI의 기능들이 업데이트되고 있어 글에 오류가 있을 수 있다. 이 글을 쓰는 시점은 2024년 1월 3일 기준이다. 또 내가 기능을 완전하게 숙지하지 못해서 경험한 문제가 있을 수도 있으니, 이글을 보고 혹시 오류를 발견하신 분은 알려주시면 감사하겠다.
'데이터' 카테고리의 다른 글
Association Rule 분석(장바구니 분석) (2) 2024.02.04 k-mean Clustering (2) 2024.01.21 caret으로 하는 데이터 전처리 (0) 2023.07.02 caret 패키지로 유방암 진단하기 (0) 2023.06.18 상관분석 (1) 2023.05.21