Skip to content

Repository files navigation

📦 개인화 컨테이너 모니터링 및 혼잡도 예측 시스템 (작성중)

서비스 설명

  • 광양항 서부 컨테이너터미널 홈페이지에서 공개중인 컨테이너 반출입데이터 중 2025년 1월 1일 ~ 2025년 7월 29일까지의 데이터를 학습하고 최근 데이터를 통해 현재 장치장에 거치되어있는 컨테이너중 사용자의 회사 소유 컨테이너를 조회하는 기능과 장치장 상황을 공지하고 이후 상황을 예측하려는 시스템

실행 방법

  1. API Key 설정
  • env파일 생성
  • OPENAI_API_KEY='자신의 api key 입력'
  • .gitignore 파일에 .env 삽입
  1. 주요 라이브러리
  • fastapi=0.112.1
  • pydantic=2.8.2
  • tensorflow=2.19.0 #모델 학습에 사용한 버전으로 다른버전 사용 시 에러발생할수도 있음
  • keras=3.10.0 #모델 학습에 사용한 버전으로 다른버전 사용 시 에러발생할수도 있음
  • numpy=2.3.2 #tesnorflow와 호환버전
  • pandas=2.1.3 #numpy와 호환버전
  • scikit-learn #numpy와 호환버전
  • typing
  1. FastAPI 실행
  • uvicorn app:app --reload

프로젝트 구조

📂 container_monitoring(root)
 ├── data/              # 전처리 전 CSV데이터
     └──터미널 반출입 목록조회_GUEST_2025-08-07_111836.csv
 ├── models/            # 학습된 모델 파일(.h5)
     └── best_lstm_model.h5
 ├── notebooks/         # 분석 및 실험용 Jupyter 노트북 (미정)
 ├── src/               # FastAPI/React 등 구현 코드
 ├── .env               # openai의 api키 삽입 등의 환경변
 ├── .gitignore
 ├── affiliation_api.py # 사용자의 소속에 맞는 컨테이너의 상황만 필터링 하여 출력
 ├── app.py             # FastAPI 어플리케이션 정의 및 데이터 전처리, 예측 실행
 ├── llm_summary.py     # 예측된 내용을 바탕으로 이후 상황을 브리핑해주는 생성형 ai
 ├── occupancy_calculator_functional.py # 현재 장치장 점유율의 상황을 계산
 ├── README.md
 └── requirements.txt   # Python 의존성

데이터 전처리

사용한 컬럼명 : 선사, 컨테이너번호, 상태, 운송유형(반입/반출), 터미널 반입/반출일시, 장치장위치

  • 광양항 서부 컨테이너터미널 홈페이지 E-service 에서 공개하고 있는 터미널 반출입 목록을 엑셀형태로 2025년 1월 1일~ 2025년 7월 29일까지의 데이터를 약 2주간격으로 다운받은 후 csv파일로 다시 저장하여 pandas를 이용해 데이터프레임으로 로드
  • df.columns = df.columns.str.strip() 실행을 통해 컬럼 명에 있는 공백을 모두 제거
  • 데이터프레임 merge 후 컨테이너번호와 터미널 반입일시가 같은 데이터를 중복데이터로 간주하고 제거 (총 데이터 610,631건) -> 이렇게 하는 이유는 데이터를 일정간격으로 여러번 다운로드 받으면서 컨테이너의 반입일시와 반출일시 사이의 간격이 긴 경우 중복되는 데이터가 있었기 때문
  • 터미널 반입일시로부터 반출일시까지를 계산하고 해당 데이터가 어떤 장치장에 거치되어있었는지를 시계열 데이터로 전환
  • 기준시간 30분 간격으로 전체 장치장에 얼마나 컨테이너가 있었는지를 학습

사용한 모델

  • LSTM
  • LSTM + CNN
  • 모델 선정 이유 : LSTM은 시계열 의존성을 학습 가능한 모델로써 하루 단위의 패턴, 주말/평일 패턴 등의 장기적인 반복성을 효과적으로 학습할 수 있음 CNN 모델을 결합하면서 특정 시간대에 집중되는 반출입이나 갑작스러운 점유율 급상승등의 단기 패턴을 학습할 수 있음. CNN이 먼저 특징을 압축하고 LSTM이 특징을 시간흐름에 맞춰 학습하게 되면서 성능향상과 동시에 계산량이 줄어 학습속도 향상과 불필요한 노이즈를 줄일수 있게 됨

📊 모델 성능 요약

모델 구성 MAE R2 SCORE
LSTM 0.016 -21.1183
CNN + LSTM 0.0142 -6.1511
CNN + LSTM_10min 0.0003 0.9991
  • 최종 선택한 모델은 CNN + LSTM_10min

  • CNN + LSTM 과 CNN + LSTM_10min의 차이점은 앞서 생성한 시계열데이터를 30분 단위를 기준으로 정한 것과 10분 단위를 기준으로 정한 것의 차이

  • 최초 LSTM만 사용했을 때보다 CNN을 결합한 모델에서 약 11% 성능향상이 있었고 R2 스코어도 음수였지만 데이터 패턴을 더 잘 반영하기 시작했음

  • 단위 시간을 10분으로 더 세분화 한 모델에서 MAE의 비약적인 성능향상과 함께 R2 스코어가 1에 가까운 모습을 보였음

    기준 시간을 더 줄여보려고 했으나 gpu 메모리가 부족했음. 더 좋은 gpu가 있다면 기준시간을 더 줄여 학습하여 더 높은 성능을 낼 수 있을것으로 예상


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages