데이터 분석가:Applied Data Analytics

플랜트 일정 데이터(XER 파일) 기반 일정 예측 모델 구축

데이터분석 2025. 2. 28. 07:49
320x100
728x90

목표: 플랜트 프로젝트 일정(XER 파일) 데이터를 분석하고, 머신러닝을 활용해 일정 지연을 예측하는 모델 구축

사용 기술: Python, Pandas, SQL, Scikit-learn, ARIMA/Prophet (시계열 예측)

주요 단계:
1. XER 파일을 Pandas로 변환 및 데이터 정리
2. 일정 데이터의 패턴 분석 및 시각화
3. 머신러닝 모델(회귀 분석, 랜덤 포레스트)로 일정 지연 예측
4. ARIMA/Prophet을 사용한 시계열 분석
5. 모델 평가 및 최적화


1.  XER 파일 변환 및 데이터 정리

Step 1: XER 파일을 CSV 또는 Excel로 변환
XER 파일이란?

  • Primavera P6에서 사용하는 일정 관리 파일
  • 직접 읽을 수 없으므로 CSV 또는 Excel로 변환 필요

변환 방법 (Primavera P6 사용 가능할 경우)

  1. Primavera P6에서 File → Export → Spreadsheet (XLSX) 선택
  2. 활용할 테이블 선택 (Activity Table, WBS, Relationships 등)
  3. CSV 또는 Excel 파일로 저장

변환 방법 (Primavera P6 사용 불가할 경우)

  • XER File Parser 같은 오픈소스 라이브러리 사용 가능
  • SQL 데이터베이스에서 직접 가져오는 방식도 가능

 

2.  데이터 로드 및 정리

Step 2: Python에서 CSV/XLSX 데이터 불러오기

import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv("project_schedule1.csv")

# 데이터 미리보기
print(df.head())

Step 3: 주요 일정 데이터 확인
주요 분석 대상 컬럼

  • Activity_ID: 작업 ID
  • Start_Date: 작업 시작일
  • Finish_Date: 작업 종료일
  • Planned_Finish: 계획된 종료일
  • Actual_Finish: 실제 종료일
  • Status: 진행 상태 (완료, 진행 중, 지연 등)
  • SPI수치 등
# 데이터 타입 확인
print(df.info())

# 결측치 확인
print(df.isnull().sum())

불필요한 데이터 제거

# 분석에 필요 없는 컬럼 삭제
df = df[['Activity_ID', 'Start_Date', 'Finish_Date', 'Planned_Finish', 'Actual_Finish', 'Status']]

날짜 데이터 변환

# 날짜 컬럼을 datetime 형식으로 변환
df['Start_Date'] = pd.to_datetime(df['Start_Date'])
df['Finish_Date'] = pd.to_datetime(df['Finish_Date'])
df['Planned_Finish'] = pd.to_datetime(df['Planned_Finish'])
df['Actual_Finish'] = pd.to_datetime(df['Actual_Finish'])

일정 지연 여부 계산

# 일정 지연 일수 계산
df['Delay_Days'] = (df['Actual_Finish'] - df['Planned_Finish']).dt.days
df['Delay_Flag'] = df['Delay_Days'].apply(lambda x: 1 if x > 0 else 0)  # 지연 여부 (1: 지연, 0: 정상)

 

3. 일정 데이터 시각화 및 패턴 분석

일정 지연 분포 확인

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10, 5))
sns.histplot(df['Delay_Days'], bins=30, kde=True)
plt.title("일정 지연 분포")
plt.xlabel("지연 일수")
plt.ylabel("빈도수")
plt.show()

주별, 월별 일정 지연 트렌드 분석

df['Month'] = df['Planned_Finish'].dt.to_period('M')

# 월별 평균 지연 일수 계산
monthly_delay = df.groupby('Month')['Delay_Days'].mean()

plt.figure(figsize=(12, 5))
monthly_delay.plot(kind='bar')
plt.title("월별 평균 일정 지연")
plt.xlabel("월")
plt.ylabel("평균 지연 일수")
plt.show()

 

4. 머신러닝을 활용한 일정 지연 예측 (랜덤 포레스트 모델)

Step 1: 머신러닝을 위한 데이터 준비

# 1: 머신러닝을 위한 데이터 준비
from sklearn.model_selection import train_test_split

# Feature & Target 설정
X = df[['Start_Date', 'Planned_Finish']]  # 독립변수
y = df['Delay_Flag']  # 목표 변수 (지연 여부 예측)

# 날짜를 숫자로 변환
X['Start_Date'] = X['Start_Date'].astype('int64') // 10**9
X['Planned_Finish'] = X['Planned_Finish'].astype('int64') // 10**9

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Step 2: 랜덤 포레스트 모델 학습

# 2: 랜덤 포레스트 모델 학습
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 모델 생성 및 학습
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 정확도 평가
print("정확도:", accuracy_score(y_test, y_pred))

 

5. 시계열 분석을 활용한 일정 지연 예측 (ARIMA, Prophet)

Step 1: ARIMA 모델 학습

# 시계열 분석을 활용한 일정 지연 예측 (ARIMA, Prophet)
# 1: ARIMA 모델 학습
from statsmodels.tsa.arima.model import ARIMA

# 시계열 데이터 준비
ts_data = df.groupby('Planned_Finish')['Delay_Days'].mean()

# ARIMA 모델 학습
model = ARIMA(ts_data, order=(1,1,1))
model_fit = model.fit()

# 예측
forecast = model_fit.forecast(steps=10)
print(forecast)

Step 2: Prophet 모델 학습

# 2: Prophet 모델 학습
from prophet import Prophet

# Prophet 데이터 준비
prophet_df = df[['Planned_Finish', 'Delay_Days']].rename(columns={'Planned_Finish': 'ds', 'Delay_Days': 'y'})

# 모델 학습
model = Prophet()
model.fit(prophet_df)

# 예측
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)

# 결과 시각화
model.plot(forecast)
plt.show()

 

6. 최종 모델 평가 및 활용 방안

모델 비교

모델  /  사용  /  목적특징

랜덤 포레스트 일정 지연 여부 예측 지연 가능성 예측, 정확도 평가
ARIMA 일정 지연 일수 예측 과거 일정 패턴 분석, 시계열 예측
Prophet 일정 지연 트렌드 분석 계절성 반영, 장기 일정 예측

적용 방안

  • 랜덤 포레스트 모델을 활용해 "이번 달 일정이 지연될 가능성이 높은지" 예측
  • Prophet 모델을 활용해 "장기적인 일정 지연 트렌드" 분석
  • ARIMA 모델을 활용해 "향후 일정 지연이 예상되는 시점" 예측

다음 단계

  1. 더 많은 피처 추가 (리소스별, 업체별, 공종별, 계절별, 작업 유형, 담당자, 프로젝트 규모 등)
  2. 모델 성능 개선 (하이퍼파라미터 튜닝, 딥러닝 적용)
  3. BI 대시보드(Tableau, Power BI)와 연동하여 시각화

이 방법을 따르면 XER 일정 데이터를 기반으로 실제 일정 예측 모델을 구축

데이터로 가치를 만드는 Steven, Follow on LinkedIn