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 사용 가능할 경우)
- Primavera P6에서 File → Export → Spreadsheet (XLSX) 선택
- 활용할 테이블 선택 (Activity Table, WBS, Relationships 등)
- 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 모델을 활용해 "향후 일정 지연이 예상되는 시점" 예측
다음 단계
- 더 많은 피처 추가 (리소스별, 업체별, 공종별, 계절별, 작업 유형, 담당자, 프로젝트 규모 등)
- 모델 성능 개선 (하이퍼파라미터 튜닝, 딥러닝 적용)
- BI 대시보드(Tableau, Power BI)와 연동하여 시각화
이 방법을 따르면 XER 일정 데이터를 기반으로 실제 일정 예측 모델을 구축
데이터로 가치를 만드는 Steven, Follow on LinkedIn
'데이터 분석가:Applied Data Analytics' 카테고리의 다른 글
확률과 분포 이해하기 1] (2) | 2025.02.28 |
---|---|
'제 자리'를 찾는 Career Repotting Project (0) | 2025.02.28 |
공정관리 와 데이터 과학자 레벨업 (0) | 2025.02.28 |
데이터 애널리스트(Data Analyst)와 가까운 직군 순서 (0) | 2025.02.28 |
IT 직군별 역할 정리 (0) | 2025.02.28 |