본문 바로가기

Projects31

[선박 대기시간 예측] 3차 전처리 : 울산항 모델용 데이터셋 도출(결측치 처리) 울산항(TARGET 항구) 추가 데이터 수집 및 전처리 👉 울산항 입항 선박 제원 정보 + 해양 기상 데이터 병합 👉 결측치 채우는 전처리 과정 결측치 확인 호출부호, 입항일시 기준 중복 행을 제거한 후, 결측치를 확인 대기율, 선박 관련된 컬럼(총톤수, 재화중량톤수 등)과 기상 상태 컬럼(풍속, 풍향 등)이 있음 ▶︎ 대기율 결측치 대기율이 결측치인 레코드는 제거 대기율이 중요한 지표인데, Null이 발생한 이유를 찾아야 함 대기율을 도출하는데 필요한 '접안대기시간'과 '서비스 시간' 값이 모두 0인 것을 확인하고 삭제 결정 # 대기율이 null 인 데이터만 확인 rows_with_null = df[df['대기율'].isnull()] # null인 이유를 다른 컬럼과 비교하여 확인 rows_with_n.. 2023. 12. 15.
[선박 대기시간 예측] 2차 전처리 : 중복값 처리 항만 대기시간 예측 및 운영시스템 개선을 위한 2차 전처리 🎯 1차 전처리 결과 : 입출항 1건 당 여러 건의 시설사용허가현황 데이터가 존재함 🎯 목표 : 선박별 입출항 1건을 기준으로 중복행 제거 01. 중복 컬럼 확인 : 호출부호, 입항일시 기준 👉 143,915 rows 중에 71,439 rows 중복 duplicate = df.duplicated(subset=['호출부호', '입항일시']).sum() duplicate 02. 접안대기시간, 출항대기시간 결측치 = 0 처리 df['출항_대기시간_분'].fillna(0, inplace = True) df['접안_대기시간_분'].fillna(0, inplace = True) 03. groupby + aggregation으로 중복행의 대푯값을 추출 Gro.. 2023. 12. 15.
[선박 대기시간 예측] 1차 전처리 : PORT-MIS 항만 데이터 결합 항만 대기시간 예측 및 운영시스템 개선을 위한 1차 전처리 🎯 목표 : 항구별 대기율 산정을 위한 입출항 개별 건에 대한 대기시간 & 서비스 시간 도출 🎯 사용 데이터 : PORT-MIS 입출항 현황 + PORT-MIS 시설사용허가현황 (총 2종) (하단 ERD에서 빨간색으로 표시된 부분) 01. Target 항만 선정을 위한 대기율 어떤 항만에 대한 대기시간 예측 모델을 만들것인지부터 결정해야했는데, 이를 위한 지표로 '대기율'을 사용했다. 후보 항만은 2022년 물동량이 가장 많은 순으로 부산, 광양, 울산, 인천을 선정했다. 대기시간과 대기율의 개념은 다음과 같다. 대기시간이 선박이 단순히 정박지에 접안하기까지 기다리는 시간이라면, 대기율은 '서비스 시간'대비 얼마나 대기하는지를 측정하는 지표이다.. 2023. 12. 15.
[선박 대기시간 예측] 주제 선정 배경 주제 선정 배경 파이널 프로젝트 주제로 '물류' 쪽을 살펴보았는데, 코로나 이후 국제 물동량 회복에 주목했고 국내 수출입 물류 비중 중, 해양 운송의 비중이 99%에 이른다는 것을 알게 되었다. 해양 운송에서 중요한 항만 운영과 관련된 사항을 조사한 결과, 물류비용 절감과 항구 경쟁력 증대에는 선박 대기시간 축소가 핵심이라는 것을 확인했다. 선박 대기시간 축소는 비용 절감뿐만 아니라 대기 중 발생하는 대기오염물질 발생도 절감할 수 있어, 여러 편익을 고려했을 때 프로젝트 주제로 채택하기 적합하다고 판단했다. 선박 입출항 프로세스 선박이 '대기'하는 시간을 측정하기 위해서는 선박 입출항 프로세스를 알아야 한다. 선박 대기는 선박이 입항하여 투묘(닻을 내림)하고 양묘(닻을 올림)하기까지의 시간을 일반적으로 .. 2023. 12. 15.
[선박 대기시간 예측] 2차 전처리 : 중복 행 정리 호출부호(선박ID) 별로 입항일시가 여러개 찍히는 경우가 있다. 사용목적(양하, 적하, 접안, 수리 등)에 따라 각각의 케이스를 구분해서 별도 Record로 데이터가 수집되어 있기 때문이다. 중복 행 확인 먼저 호출부호와 입항일시 기준으로 중복 컬럼을 먼저 확인한다. duplicate = df.duplicated(subset=['호출부호', '입항일시']).sum() duplicate -- 결과 : 71439 중복 행 확인 '호출부호'와 '입항일시' 열을 기준으로 중복된 모든 행을 원본 데이터프레임에서 선택하고, 이를 duplicated_rows에 저장 👉 duplicated_rows에는 중복된 행들만 포함되어 있는 상태 # 모든 중복 행을 선택(keep=False) duplicated_rows = df.. 2023. 11. 15.
[Mini Project] 11. Baseline Modeling (LightGBM + K-fold CV + RandomSearch) ✔ Process Check 지금까지 이상치와 결측치 등을 점검하는 EDA를 마친 후, 파생변수를 생성했다. 이제 모델링을 통해 유의미한 파생변수를 선택하고, 최종 모델링에 필요한 변수를 채택하는 과정이 남았다. 이를 위해 아래와 같이 LightGBM + K-fold CV + RandomSearch 을 활용한 모델링 베이스라인 코드가 완성되었다. 1. 라이브러리 불러오기 import numpy as np import pandas as pd import lightgbm as lgb from lightgbm import LGBMRegressor from sklearn.model_selection import KFold, train_test_split, RandomizedSearchCV from sklearn.. 2023. 9. 26.
[Mini Project] 10. 매출의 분포 확인 (+ 이상치 제거 후 모델 성능 체크) 🌿 매출 분포 확인 모델링 진행 중, 종속변수인 매출의 분포를 체크해보았다. 가장 중요한 이 변수의 분포에 따라 모델 성능을 RMSE로 할지, MAE로 할지가 정해지기 때문이다. 만약 왜도가 높아 분포가 고르지 않다면, RMSE를 써야하고 그 반대의 경우는 MAE를 쓰는 것이 보다 직관적인 결과해석이 가능하다. ✔ 골목상권 매출 분포 왜도 값까지 출력할 수 있도록 코드를 작성하여 골목상권의 매출 분포를 히스토그램으로 그려보았다. fig, ax = plt.subplots(1, 1, figsize=(18,10)) g = sns.histplot(df_gol['매출'], color='b', label='Skewness : {:.2f}'.format(df_gol['매출'].skew()), ax=ax) g.lege.. 2023. 9. 18.
[Mini Project] 9. 모델링 및 피쳐(파생변수) 선택 🌿 모델링 진행사항 모델링 협업 팀원이 간략히 골목/비골목 상권을 나누어서 모델링을 진행한 결과가 RMSE가 낮음을 확인했다. 따라서 골목/비골목 상권별로 모델을 각각 진행하기로 했다. 현재 모든 피쳐를 살려 모델링하면 RMSE(시작점)는 약 49906.78 이다. 여기서 피쳐 엔지니어링을 거쳐 모델 성능을 개선하여 RMSE를 낮춰보기로 했다. 1. 파생변수 브레인스토밍 의사결정트리 기반 앙상블 모델인 LGBM을 쓸 예정이라, 정규화(로그변환, 표준화 변환), 스케일링(min-max등)은 필요하지 않다고 한단했다. 다음 스텝으로 피쳐를 하나씩 살펴보며 어떤 의미를 가진 데이터인지, 결합하여 의미있는 파생변수를 도출할 여지가 있는지를 살피고 아래와 같이 브레인스토밍 과정을 기록했다. 2. 각 파생변수가 모.. 2023. 9. 18.
[프로젝트 스터디] 회귀 문제 평가 지표 LightGBM은 효율적인 부스팅 알고리즘을 사용하는 머신러닝 라이브러리이다. 본 세미 프로젝트는 회귀 문제에 해당하니 LightGBM으로 모델 학습하고, 평가 지표를 설정하는 방법을 찾아보기로 했다. LightGBM의 평가 지표 종류(회귀문제) LightGBM은 LightGBMRegressor 클래스를 사용하여 회귀 모델을 학습한다. 회귀 문제에서 사용되는 평가지표는 데이터 특성에 따라 선택할 수 있으니, 적절한 평가 지표로 모델 성능을 평가, 비교하여 최적의 모델을 선택해야 한다. 🥑 평균 제곱 오차 (MSE) 예시 from lightgbm import LGBMRegressor from sklearn.metrics import mean_squared_error # LightGBM 회귀 모델 생성 및 .. 2023. 9. 14.
728x90