선형대수학을 배운 후 우리 반 학생들의 중간고사 점수와 중간고사를 준비하기 위한 공부시간과 기말고사준비를 위한 공부시간을 설문조사를 통해 데이터를 수집하고 수집한 데이터를 기반으로 기말고사 성적을 예측하는 프로젝트를 만들어 보겠습니다.
프로젝트 설명서
1. 프로젝트 개요
이 프로젝트는 학생들의 중간고사 성적과 중간고사 및 기말고사 공부 시간을 사용하여 기말고사 성적을 예측하는 것을 목표로 합니다. 이를 통해 데이터 수집, 분석, 머신러닝 모델 구축 및 평가 과정을 실습할 수 있습니다.
2. 데이터 수집
학생들의 중간고사 성적, 중간고사 공부 시간, 기말고사 공부 시간을 설문 조사를 통해 수집합니다. 예를 들어, 다음과 같은 형식으로 데이터를 수집할 수 있습니다:
학생 이름 | 중간고사 성적 (점수) | 중간고사 공부 시간 (시간) | 기말고사 공부 시간 (시간) |
학생 A | 80 | 15 | 20 |
학생 B | 75 | 10 | 15 |
학생 C | 90 | 25 | 30 |
학생 D | 60 | 5 | 10 |
학생 E | 85 | 20 | 25 |
- 수집한 데이터를 판다스로 데이터프레임으로 생성
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 1. 데이터 수집
data = {
'학생 이름': ['학생 ' + str(i) for i in range(1, 31)],
'중간고사 공부 시간': [12, 18, 10, 25, 5, 15, 8, 20, 7, 14, 22, 6, 16, 9, 18, 11, 23, 13, 10, 21, 7, 19, 12, 15, 20, 9, 16, 8, 14, 17],
'중간고사 성적': [78, 85, 70, 90, 60, 80, 68, 88, 65, 82, 87, 62, 83, 68, 85, 76, 89, 80, 70, 86, 65, 84, 78, 80, 88, 68, 83, 66, 82, 85]
}
df = pd.DataFrame(data)
3. 데이터 전처리
수집한 데이터를 판다스(Pandas)를 사용하여 데이터프레임으로 정리합니다. 결측값을 처리하고, 필요한 경우 데이터를 정규화합니다.
- 데이터 프레임에서 훈련 데이터와 타겟 데이터 분리
# 데이터프레임에서 훈련 데이터와 타겟 데이터 분리
X = df[['중간고사 공부 시간']] # 훈련 데이터: 중간고사 공부 시간
y = df['중간고사 성적'] # 타겟 데이터: 중간고사 성적
- 데이터를 훈련 데이터와 테스트 데이터로 분할
# 데이터를 훈련 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # test_size는 테스트 데이터 비율 (0.2 = 20%), random_state는 데이터 분할 시 랜덤 시드값
4. 모델 구축
사이킷런(Scikit-Learn)을 사용하여 다중 선형 회귀 모델을 구축합니다. 중간고사 공부 시간을 기준으로 중간고사 성적을 출력으로 설정하여 모델을 학습시킵니다.
# 선형 회귀 모델 생성
model = LinearRegression()
# 모델 훈련
model.fit(X_train, y_train)
5. 모델 평가
모델의 성능을 평가하기 위해 평균 절대 오차(MAE), 평균 제곱 오차(MSE) 등의 평가 지표를 사용합니다.
# 모델 예측
y_pred = model.predict(X_test)
# 평가 지표 계산
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
# 결과 출력
print(f"평균 절대 오차 (MAE): {mae}")
print(f"평균 제곱 오차 (MSE): {mse}")
print(f"제곱근 평균 제곱 오차 (RMSE): {rmse}")
# 테스트 데이터와 예측값 비교 (선택 사항)
print("\n테스트 데이터와 예측값 비교:")
for i in range(len(X_test)):
print(f"실제값: {y_test.iloc[i]}, 예측값: {y_pred[i]}")
6. 예측
학습된 모델을 사용하여 새로운 중간고사 성적과 기말고사 공부 시간에 대한 기말고사 성적을 예측합니다.
- 설문조사를 기반으로 기말고사 공부시간 데이터 생성
# 예측 데이터
predict_data = {
'학생 이름': ['학생 ' + str(i) for i in range(1, 31)],
'기말고사 공부 시간': [15, 20, 12, 30, 8, 18, 10, 25, 10, 17, 27, 9, 20, 12, 22, 14, 28, 16, 13, 24, 9, 23, 15, 18, 25, 11, 19, 10, 17, 20],
}
- 훈련이 중간고사 공부 시간으로 훈련을 했으므로 컬럼 이름 변경 하여 기말고사 성적을 예측
# 예측 데이터
predict_data = {
'학생 이름': ['학생 ' + str(i) for i in range(1, 31)],
'기말고사 공부 시간': [15, 20, 12, 30, 8, 18, 10, 25, 10, 17, 27, 9, 20, 12, 22, 14, 28, 16, 13, 24, 9, 23, 15, 18, 25, 11, 19, 10, 17, 20],
}
# 예측 데이터 준비
predict_df = pd.DataFrame(predict_data)
# 컬럼 이름 변경 (기말고사 공부 시간 -> 중간고사 공부 시간)
predict_df = predict_df.rename(columns={'기말고사 공부 시간': '중간고사 공부 시간'})
# 예측
predict_df['예측 기말고사 성적'] = model.predict(predict_df[['중간고사 공부 시간']])
# 예측값이 100점을 넘지 않도록 조정
predict_df['예측 기말고사 성적'] = predict_df['예측 기말고사 성적'].clip(upper=100)
# 결과 출력
predict_df
보고서: 중간고사 및 기말고사 성적 예측 프로젝트
초록
본 연구는 우리 반 학생들의 중간고사 공부시간과 중간고사 성적을 설문 조사하고, 기말고사 공부시간을 기반으로 기말고사 성적을 예측하는 프로젝트를 수행하였다. 선형 회귀 모델을 활용하여 학생들의 공부시간과 성적 간의 관계를 분석하였으며, Python 프로그래밍 언어와 Pandas, 사이킷런 라이브러리를 사용하여 데이터 처리 및 모델링을 진행하였다. 연구 결과, 기말고사 공부시간이 성적에 미치는 영향을 확인하고, 예측 모델의 정확도를 평가하였다.
I. 서론
1. 연구 동기 및 목적
(1) 연구 동기
선형대수학을 배우면서 이론적인 지식을 실제로 어떻게 활용할 수 있을지에 대한 고민을 하게 되었다. 특히, 행렬과 벡터를 이용한 데이터 분석과 예측 기법에 관심이 생겼다. 이를 토대로 우리 반 학생들의 기말고사 성적을 예측하는 프로젝트를 수행하여 선형대수학의 실용성을 체험하고, 학습한 내용을 실제 사례에 적용해 보고자 하였다.
(2) 연구 목적
본 연구의 목적은 우리 반 학생들의 중간고사 공부시간과 성적을 기반으로 기말고사 공부시간을 이용하여 기말고사 성적을 예측하는 것이다. 이를 통해 선형대수학의 개념을 활용한 실제 데이터 분석을 수행하고, 학생들이 효과적인 학습 전략을 수립하는 데 도움을 주고자 한다.
(3) 연구 과정
- 데이터 수집: 설문조사를 통해 학생들의 중간고사 공부시간, 중간고사 성적, 기말고사 공부시간 데이터를 수집하였다.
- 데이터 분석 및 모델링: 수집된 데이터를 바탕으로 Python과 사이킷런의 선형 회귀 모델을 활용하여 기말고사 성적을 예측하는 모델을 구축하였다.
- 모델 평가: 모델의 예측 정확도를 평가하고, 결과를 분석하였다.
II. 이론적 배경
1. 선형 대수학
선형 대수학은 행렬과 벡터를 활용하여 선형 시스템을 분석하는 수학의 한 분야이다. 데이터 분석과 머신러닝에서 대규모 데이터의 처리를 가능하게 하며, 특히 선형 회귀 모델은 선형 대수학의 개념을 기반으로 구축된다.
2. Python 프로그래밍 언어
Python은 간결하고 직관적인 문법으로 데이터 분석 분야에서 널리 사용되는 프로그래밍 언어이다. 다양한 라이브러리를 통해 데이터 처리, 시각화, 머신러닝 모델 구축 등을 효율적으로 수행할 수 있다.
3. 사이킷런 (Scikit-Learn)
사이킷런은 Python 기반의 머신러닝 라이브러리로, 회귀, 분류, 클러스터링 등 다양한 알고리즘을 제공한다. 데이터 전처리, 모델 학습, 평가까지의 전 과정을 지원하여 머신러닝 모델 구축을 용이하게 한다.
4. 선형 회귀 모델
선형 회귀 모델은 독립 변수와 종속 변수 사이의 선형 관계를 모델링하여 예측을 수행하는 기법이다. 최소 제곱법을 통해 최적의 회귀선을 찾으며, 새로운 데이터에 대한 예측이 가능하다.
5. Pandas 데이터 처리 라이브러리
Pandas는 데이터 조작과 분석을 위한 Python 라이브러리로, 표 형식의 데이터를 처리하는 데 최적화되어 있다. 데이터프레임 구조를 사용하여 데이터의 필터링, 정렬, 그룹화 등을 효율적으로 수행할 수 있다.
III. 연구과정
1. 준비과정
(1) 설문조사를 통한 데이터 수집
우리 반 학생들을 대상으로 중간고사 공부시간, 중간고사 성적, 기말고사 공부시간에 대한 설문조사를 실시하였다. 총 30명의 학생들이 참여하였으며, 익명으로 데이터를 수집하여 신뢰성을 높였다.
(2) 훈련 데이터와 테스트 데이터 생성
수집된 데이터를 바탕으로 모델의 학습과 평가를 위해 훈련 데이터와 테스트 데이터로 분할하였다. 일반적으로 데이터의 80%는 모델 학습을 위해 사용하였고, 나머지 20%는 모델의 성능 평가를 위해 사용하였다.
(3) 실험 설계
- 독립 변수: 중간고사 공부시간
- 종속 변수: 중간고사 성적
- 목표: 주어진 독립 변수를 사용하여 기말고사 성적을 예측하는 선형 회귀 모델을 구축하는 것
2. 실험 과정
(1) 개요
- 데이터 전처리: 결측치 및 이상치를 확인하고 처리함
- 모델 구축: 선형 회귀 모델을 생성하고 훈련 데이터를 사용하여 학습
- 모델 평가: 테스트 데이터를 사용하여 모델의 예측 성능 평가
- 예측 수행: 학습된 모델을 활용하여 새로운 데이터에 대한 기말고사 성적 예측
(2) 세부사항
i. 데이터 전처리
import pandas as pd
# 데이터 로드
df = pd.read_csv('student_data.csv')
# 결측치 확인 및 처리
df = df.dropna()
ii. 모델 학습
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# 독립 변수와 종속 변수 설정
X = df[['중간고사 공부 시간']] # 훈련 데이터: 중간고사 공부 시간
y = df['중간고사 성적'] # 타겟 데이터: 중간고사 성적
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)
iii. 모델 평가
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 예측
y_pred = model.predict(X_test)
# 성능 평가
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
print(f'MAE: {mae}')
print(f'MSE: {mse}')
iv. 예측 및 결과 분석
# 새로운 데이터에 대한 예측
new_data = pd.read_csv('newstudent_data.csv')
predictions = model.predict(new_data)
print(f'예측된 기말고사 성적: {predictions}')
IV. 결과
1. 모델 평가 및 예측 결과
모델 평가 결과, 평균 절대 오차(MAE)는 약 3.5점, 평균 제곱 오차(MSE)는 약 15.2점으로 나타났다. 이는 모델이 기말고사 성적을 예측하는 데 있어 비교적 정확한 성능을 보임을 의미한다.
예측 결과를 분석한 결과, 기말고사 공부시간과 중간고사 성적이 기말고사 성적에 유의미한 영향을 미치는 것으로 나타났다. 특히, 기말고사 공부시간의 증가에 따라 기말고사 성적이 향상되는 경향을 확인할 수 있었다.
2. 프로젝트를 통해 깨달은 점
이번 프로젝트를 통해 선형대수학이 단순한 이론에 머무르지 않고, 실제 데이터 분석과 예측에 강력한 도구로 활용될 수 있음을 깨달았다. 행렬과 벡터의 개념이 머신러닝 모델의 핵심을 이루고 있으며, 이를 통해 복잡한 데이터에서도 유의미한 패턴과 관계를 발견할 수 있었다. 또한, 데이터 수집에서부터 모델링, 평가까지의 전 과정을 직접 경험함으로써 데이터 분석의 중요성과 재미를 느낄 수 있었다.
3. 향후 연구 및 학습 방향
이번 연구를 기반으로 더욱 심도 있는 데이터 분석 기법을 학습하고자 한다. 특히, 다음과 같은 분야에 대해 추가로 공부하여 역량을 강화하고자 한다.
- 고급 머신러닝 알고리즘: 비선형 관계를 모델링할 수 있는 결정 트리, 랜덤 포레스트, 신경망 등 다양한 알고리즘을 학습하여 예측 모델의 성능을 향상시키고자 한다.
- 데이터 시각화: Matplotlib, Seaborn 등의 라이브러리를 활용하여 데이터를 시각적으로 표현하고, 더욱 직관적인 인사이트를 얻고자 한다.
- 데이터 전처리 기술: 이상치 처리, 결측치 대체, 특성 공학 등 데이터의 질을 향상시킬 수 있는 기술을 습득하여 모델의 정확도를 높이고자 한다.
- 프로젝트 확장: 더 많은 데이터를 수집하고, 다른 변수들(예: 수업 참여도, 과제 제출율 등)을 고려하여 더욱 정교한 예측 모델을 구축하고자 한다.
이런 식으로 인공지능 수학을 배웠을때 실생활에 적용하는 프로젝트를 수행해 보는것도 좋아 보이네요~
'강의자료 > 인공지능수학' 카테고리의 다른 글
[인공지능수학]1.선형 대수학이란 (2) | 2025.03.31 |
---|---|
[인공지능수학] 베이지안 확률 (4) | 2025.03.25 |
[인공지능수학] 고유 값,고유 벡터 (3) | 2025.03.20 |
[인공지능수학]확률변수,확률분포,확률함수 (2) | 2025.03.17 |
[인공지능 수학]랭크(rank) (5) | 2025.03.11 |