본문 바로가기
파이썬

파이썬을 이용한 인공지능 선형회귀 프로그램-등산객수에 따른 산불 발생량 예측

by 코딩-가이드 2025. 4. 8.
반응형

 

성형회귀 모델을 설명하기 위해 등산객 수와 산불 발생량 사이의 연관성을 분석하는 샘플 프로그램을 작성해 보겠습니다. 파이썬과 scikit-learn 라이브러리를 사용하여 선형회귀(Linear Regression) 모델로 등산객 수에 따른 산불 발생량을 예측하는 방법을 소개합니다.

 

1. 선형회귀 모델이란?

선형회귀는 종속 변수(예: 산불 발생량)가 하나 이상의 독립 변수(예: 등산객 수)에 선형적으로 영향을 받는다는 가정 하에 수학적으로 모델링하는 기법입니다. 간단히 말해, y = ax + b의 직선 공식을 데이터에 맞춰 학습합니다.

 

 

2. 선형회귀를 이용한 샘플 프로그램 - 등산객수에 따른 산불 발생량 예측

[예제]

import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import platform

# 한글 폰트 설정
if platform.system() == 'Windows':
    plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
    plt.rc('font', family='AppleGothic')
else:
    plt.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False

# 데이터 생성
data = {
    'hikers': [10, 20, 30, 40, 50, 60, 70],
    'fires': [1, 2, 2, 3, 4, 4, 5]
}
df = pd.DataFrame(data)

# 모델 학습
X = df[['hikers']]
y = df['fires']
model = LinearRegression()
model.fit(X, y)

# 예측
future = pd.DataFrame({'hikers': [80]})
prediction = model.predict(future)
print(f"예측된 산불 발생량: {prediction[0]:.2f}건")

# 시각화
plt.scatter(df['hikers'], df['fires'], color='green', label='실제 데이터')
plt.plot(df['hikers'], model.predict(X), color='red', label='회귀선')
plt.xlabel("등산객 수 (천 명)")
plt.ylabel("산불 발생 건수")
plt.title("등산객 수에 따른 산불 발생 예측")
plt.legend()
plt.grid()
plt.show()

 

[결과]

 

3. "등산객수에 따른 산불 발생량 예측" 프로그램 설명

3-1 데이터 준비

data = {
    'hikers': [10, 20, 30, 40, 50, 60, 70],
    'fires': [1, 2, 2, 3, 4, 4, 5]
}
df = pd.DataFrame(data)

 

 

  • hikers: 하루 등산객 수를 천 명 단위로 표현한 숫자 리스트입니다.
  • fires: 해당 인원수일 때 발생한 산불 건수입니다.
  • 이 데이터를 기반으로 DataFrame을 생성하여 분석할 수 있게 정리합니다.

 

 

3-2. 선형 회귀 모델 학습

X = df[['hikers']]  # 독립 변수 (입력값)
y = df['fires']     # 종속 변수 (예측 대상)

model = LinearRegression()
model.fit(X, y)

 

  • X는 입력 변수(독립 변수)이며, 2차원 형태로 [['hikers']]와 같이 작성합니다.
  • y는 타겟 값(종속 변수)인 산불 발생 건수입니다.
  • model.fit()을 통해 회귀 모델이 데이터를 학습하게 됩니다.
  • 결과적으로 이 모델은 y = a * x + b 형태의 직선 방정식을 학습합니다.

3-3. 예측 수행

future = pd.DataFrame({'hikers': [80]})
prediction = model.predict(future)

 

 

  • 등산객 수가 80,000명일 경우(80) 산불이 몇 건 발생할지 예측합니다.
  • model.predict() 함수는 입력값에 대해 학습된 선형 회귀 방정식을 적용하여 예측값을 반환합니다.

3-4. 시각화 처리

plt.scatter(df['hikers'], df['fires'], color='green', label='실제 데이터')
plt.plot(df['hikers'], model.predict(X), color='red', label='회귀선')
plt.xlabel("등산객 수 (천 명)")
plt.ylabel("산불 발생 건수")
plt.title("등산객 수에 따른 산불 발생 예측")
plt.legend()
plt.grid()
plt.show()

 

 

  • 산점도 (scatter): 실제 관측 데이터를 초록색 점으로 표시.
  • 회귀선 (line plot): 학습된 모델이 그린 예측 선을 빨간색으로 표현.
  • 레이블과 제목은 한글로 처리하며, 그래프는 깔끔하게 그리드와 범례를 포함합니다.

3-5. 폰트 오류 해결 (한글 깨짐 방지)

import platform
if platform.system() == 'Windows':
    plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
    plt.rc('font', family='AppleGothic')
else:
    plt.rc('font', family='NanumGothic')

plt.rcParams['axes.unicode_minus'] = False

 

 

  • 위 코드를 넣지 않으면 "UserWarning: Glyph 49328 (\N{HANGUL SYLLABLE SAN}) missing from current font."라는 오류가 발생합니다.
  • matplotlib는 기본적으로 한글을 지원하지 않기 때문에, 시스템에 따라 폰트를 지정해줘야 합니다.
  • 마이너스 기호(−)도 제대로 보이도록 별도 설정합니다.

선형회귀는 기본 개념이 매우 단순합니다. 다음번에는 좀 더 복잡하게 등산객수와 기온 2가지 요소를 이용하여 산불량을 예측해 보는 프로그램을 다중 선형회귀를 이용하여 만들어 보겠습니다.

반응형