이미지 기반 콘텐츠 성과 인사이트 분석 플랫폼
AP.SIGNAL은 소셜 미디어 콘텐츠의 성과를 분석하고 예측하는 Streamlit 기반 웹 애플리케이션입니다. 대한민국 화장품 브랜드 Laneige의 7개 국가별(싱가포르, 말레이시아, 태국, 인도네시아, 필리핀, 베트남, 일본) 인스타그램 계정의 콘텐츠 데이터를 분석하여 이미지 타입별 활용도, 성과 패턴, 전략적 인사이트를 제공합니다.
https://ap-signal-2026.streamlit.app
project/
│
├─ app.py # 앱 엔트리 (라우팅 + 레이아웃만)
│
├─ tabs/ # 탭 단위 화면
│ ├─ tab1_usage.py # 콘텐츠 활용도 모니터링
│ ├─ tab2_performance.py # 성과 분석 & 패턴 도출
│ └─ tab3_predict.py # CV 기반 성과 예측
│
├─ utils/ # 계산/로직
│ ├─ data_loader.py # 엑셀 로드, 전처리
│ ├─ eda_metrics.py # 국가별 집계, 상위 10%/30%, 안정성
│ ├─ charts.py # 공통 차트 함수 (Plotly)
│ ├─ insight_text.py # 자동 인사이트 문구 생성
│ ├─ insights_store.py # JSON 인사이트 데이터 로드
│ └─ metrics.py # KPI 계산 함수
│
├─ models/ # ML 관련
│ ├─ cv_model.py # 모델 정의 및 로드
│ ├─ final_multitask_logengZ_model.pth
│ ├─ logengZ_scaler.pkl
│ └─ country_encoder.pkl
│
├─ components/ # UI/디자인
│ ├─ layout.py # 헤더, 섹션 타이틀, 공통 컴포넌트
│ ├─ style.py # CSS 스타일 주입
│ ├─ design_tokens.py # 디자인 토큰 (색상, 폰트, 간격 등)
│ └─ landing.py # 랜딩 페이지
│
├─ data/ # 데이터 파일
│ ├─ agent6_final_db.xlsx
│ ├─ agent6_final_reg_db.xlsx
│ └─ insights/ # JSON 인사이트 데이터
│ ├─ tab1.json
│ └─ tab2.json
│
├─ fonts/ # 폰트 파일
│ ├─ AritaDotumKR-*.ttf
│ └─ AritaSansLTN-*.ttf
│
├─ assets/ # 이미지 에셋
│ └─ 1.jpg ~ 6.jpg # 이미지 타입 가이드 이미지
│
├─ requirements.txt # Python 의존성
├─ runtime.txt # Python 버전
└─ README.md
2개의 서브섹션으로 구성:
- 이미지 타입별 활용 분포 모니터링
- 각 국가별로 사용되는 이미지 타입의 개수 및 비율
- 가장 많이 사용된 이미지 타입 TOP 2
- 시각화: Bar Chart (Plotly)
- AI 분석 및 전략 요약
- 이미지 타입별 참여율 분포 모니터링
- 이미지 타입별 참여율
- 좋아요/댓글 수(engagement score) 분포
- AI 해석 요약
4개의 서브섹션으로 구성:
-
성과 및 반응 성격 분석
- 이미지 타입별 성과 분석
- 이미지 타입별 반응 패턴
- 평균/중앙값 성과 비교
- AI 분석 요약
-
고성과 분석
- Top 10% / Top 30% 성과 달성 구성
- 고성과 콘텐츠 내 이미지 타입 집중도
- Top 10% / Top 30% 달성 확률
- AI 분석 요약
-
안정성 분석
- 분석 지표
- 표준편차(STD): 성과 변동성 측정
- IQR(사분위수 범위): 중간 50% 퍼짐 정도
- 변동계수(CV): 상대적 변동성
- AI 안정성 요약
- 분석 지표
-
전략 인사이트
- 활용도 vs 성과 분석
- 과소 활용 타입 (확대 후보)
- 과대 활용 타입 (축소/개선 후보)
- 종합 인사이트 요약
- 이미지 업로드 기반 성과 예측
- 국가별 상대적 성과 위치(Percentile) 제공
- 이미지 타입 자동 분류
- AI 해석 및 인사이트 제공
- Streamlit 앱의 메인 엔트리 포인트
- 페이지 설정, 헤더 렌더링
- 사이드바 필터 (국가 선택)
- 탭 라우팅
tab1_usage.py: 콘텐츠 활용도 모니터링 화면tab2_performance.py: 성과 분석 및 패턴 도출 화면tab3_predict.py: AI 기반 성과 예측 화면
-
data_loader.py:- 엑셀 파일 로드 (
@st.cache_data사용) - 국가 목록 추출
- 엑셀 파일 로드 (
-
eda_metrics.py:- 국가별 데이터 전처리
- 이미지 타입별 분포 계산
- 성과 요약 (평균, 중앙값)
- Top N% 확률 및 집중도 계산
- 안정성 지표 (STD, IQR, CV)
- 활용도 vs 성과 분석
- 반응 성격 분석
-
charts.py:- Plotly 기반 차트 생성 함수
- 국가별 차트 (분포, 성과, Top N%, 안정성 등)
- 국가 코드 → 한글 이름 변환
-
insight_text.py:- 자동 인사이트 문구 생성
- 활용도, 성과, 고성과, 안정성, 전략 인사이트
-
insights_store.py:- JSON 형식의 사전 생성된 인사이트 데이터 로드
- 탭별 인사이트 관리
-
metrics.py:- KPI 계산 함수
- 활용도 및 성과 지표 계산
cv_model.py:- MultiTaskModel 정의 (EfficientNet-B0 기반)
- 모델 로드 및 추론
- 이미지 전처리 변환
- 이미지 타입 설명 딕셔너리
layout.py: 헤더, 섹션 타이틀, 공통 UI 컴포넌트style.py: CSS 스타일 주입design_tokens.py: 디자인 시스템 토큰 (색상, 폰트 크기, 간격, 테두리 등)landing.py: 랜딩 페이지 컴포넌트
- SG: 싱가포르
- MY: 말레이시아
- TH: 태국
- ID: 인도네시아
- PH: 필리핀
- VN: 베트남
- JP: 일본
- Type 1: 여러 제품을 함께 보여주는 제품 단체샷
- Type 2: 한 제품을 단독으로 강조한 제품 단독샷
- Type 3: 제품 제형/텍스처를 중심으로 한 제품 질감샷
- Type 4: 모델과 제품을 함께 배치한 이미지
- Type 5: 제품 없이 모델 중심으로 연출된 이미지
- Type 6: 여러 인물과 제품을 함께 보여주는 이미지
eng_rate = (likes + comments) / followers
- 각 이미지 타입이 상위 N% 성과를 달성할 확률
- 국가별 기준선(threshold) 계산
- STD: 표준편차 (낮을수록 안정적)
- IQR: 사분위수 범위 (낮을수록 퍼짐 적음)
- CV: 변동계수 = STD / Mean
- 과소 활용: 성과는 좋은데 활용도가 낮은 타입 (확대 후보)
- 과대 활용: 활용도는 높은데 성과가 낮은 타입 (축소/개선 후보)
pip install -r requirements.txtstreamlit run app.py기본적으로 http://localhost:8501에서 실행됩니다.
https://ap-signal-2026.streamlit.app
streamlit==1.31.1: 웹 애플리케이션 프레임워크pandas==2.1.4,numpy==1.26.4: 데이터 처리plotly==5.18.0: 인터랙티브 차트torch==2.2.2,torchvision==0.17.2: 딥러닝 모델scikit-learn==1.4.2: 머신러닝 유틸리티openpyxl: 엑셀 파일 읽기pillow==10.2.0: 이미지 처리streamlit-option-menu==0.3.13: 옵션 메뉴 컴포넌트
- 데이터 로드:
data_loader.py에서 엑셀 파일 로드 - 전처리:
eda_metrics.py의preprocess_country_data()로 국가별 데이터 정제 - 분석: 각종 지표 계산 (분포, 성과, 안정성 등)
- 시각화:
charts.py의 Plotly 함수로 차트 생성 - 인사이트:
insight_text.py로 자동 인사이트 생성 - 표시: Streamlit으로 화면에 렌더링
사용자 국가 선택
↓
데이터 전처리 (preprocess_country_data)
↓
지표 계산 (eda_metrics 함수들)
↓
차트 생성 (charts 함수들)
↓
인사이트 생성 (insight_text 함수들)
↓
화면 표시 (Streamlit)
- 이미지 타입별 사용 빈도
- TOP 2 타입 식별
- 평균/중앙값 참여율
- 좋아요/댓글 수 분포
- 이미지 타입별 성과 순위
- Top 10%/30% 달성 확률
- 고성과 콘텐츠 내 타입 집중도
- 변동성 측정 (STD, IQR, CV)
- 예측 가능성 평가
- 활용도 vs 성과 매트릭스
- 과소/과대 활용 타입 식별
- 최적 활용 전략 제안
- 데이터 파일은
data/디렉토리에 위치해야 합니다. - 모델 파일은
models/디렉토리에 위치해야 합니다. - 인사이트 JSON 파일은
data/insights/디렉토리에 위치해야 합니다. - 폰트 파일은
fonts/디렉토리에 위치해야 합니다. - 국가별 데이터가 없는 경우 경고 메시지가 표시됩니다.
- 모든 차트는 Plotly 기반으로 인터랙티브합니다.
- 디자인 시스템은
components/design_tokens.py에서 중앙 관리됩니다.