본문 바로가기

Projects/⛴️ Ship Waiting Time Prediction8

[선박 대기시간 예측] 예측 결과 활용 예시 & 기대 효과 01. 예측 결과 활용 예시 궁극적으로 선박 대기 시간의 '분' 단위 예측을 통해 선박이 최대한 바로 서비스할 수 있는 시간에 입항할 수 있도록 하고자 한다. 다음 예시는 오전 7시에 입항 예정인 선박과 선석의 정보이며, 그때의 기상상태를 가상으로 만들었다. 아래와 같은 상황에서 예상 대기시간은 511분으로 예측되었다. 02. 기대효과 기대효과 1. 선박 비용 측면 오차가 적은 대기시간 예측은 불필요한 선박 대기 비용을 줄여준다. 실제 어느 정도의 대기비용 절감 효과가 나타날지 측정하기 위해 논문을 참고하여 대기비용 산출 식을 재구성했다. 기대효과 2. 대기오염 감소 측면 선박 대기시간 감소의 추가 효과로 대기오염물질 배출 감소가 있었다. 위와 동일하게 선박 대기시간이 감소했을 때 어느 정도의 배출 감소.. 2023. 12. 15.
[선박 대기시간 예측] 파생변수 생성 + 선박 대기시간 예측 모델(LightGBM) 항만 대기시간 예측 및 운영시스템 개선을 위한 Feature Engineering + Model 구축 Feature Engineering 선박, 선석 기준으로 피쳐를 파악하고 나서 유의미한 파생변수를 만들고자 했다. 도메인 지식이 완전하지 않다고 여겨 논문들을 참고하여 총 6개 변수를 만들어 보았다. 변수 생성은 '선박'과 '선석'으로 기준을 나누어 진행했다. 1. 선박 일 별 누적입항 건수 선석 기준 변수로, 선박이 입항하고자 하는 선석에 그 전 시간대까지 몇 개의 선박이 입항했는지를 count 한다. df['이전_입항선박수'] = df.groupby(['ETA_Year', 'ETA_Month', 'ETA_Day', '계선장소명'])['호출부호'].cumcount() # 확인용 df[df['계선장소명.. 2023. 12. 15.
[선박 대기시간 예측] 시계열/선석 기반 EDA 항만 대기시간 예측 및 운영시스템 개선을 위한 EDA 🎯 목표 : 시계열 데이터의 주기성을 확인하고, 시계열 예측 모델(Prophet)을 만들어 결과 확인하기 (데이터는 액체화물과 비액체화물로 나누어 진행) 01. 연도별 월 별 대기시간 시각화(액체화물) 👉 목표 : 시간대별 대기시간 평균 / 건 수의 분포를 살펴 '시계열' 모델을 사용할 만 한 지 판단하기로 함 👉 결과 : 대기시간 평균은 뚜렷한 주기성은 보이지 않으나, 대기 건수는 월별로 편차가 있느 경향을 확인함 liquid['Datetime'] = pd.to_datetime(liquid['Datetime']) # 월별 접안_대기시간_분(평균) temp = liquid[['Datetime', 'ETA_Year','ETA_Month', '접안_대기시.. 2023. 12. 15.
[선박 대기시간 예측] 선박 기반 EDA target 항구인 울산항의 데이터를 종합하여 EDA 시행 01. 단순 EDA 접안 대기시간 유무 선박 용도별 접안대기 발생 비율 선박 용도별 접안 대기시간 평균 선박 용도별 대기율(방문순) 계선장소별 접안대기 발생비율(상위 10개) 상관 분석 Heatmap과 수치 (1) 접안 대기시간 유무 👉 전체 입항건 중 20%만 대기를 가지는 것으로 확인 # '접안_대기시간_분' 열이 0인 데이터와 0이 아닌 데이터의 갯수 계산 count_zero = (df['접안_대기시간_분'] == 0).sum() count_non_zero = (df['접안_대기시간_분'] != 0).sum() # Pretty colors colors = ['#FF9999', '#66B2FF'] # 막대 그래프 그리기 bars = plt.b.. 2023. 12. 15.
[선박 대기시간 예측] 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.
728x90