<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sieun Kim Portfolio</title><link>https://siuunni.github.io/</link><atom:link href="https://siuunni.github.io/index.xml" rel="self" type="application/rss+xml"/><description>Sieun Kim Portfolio</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>ko-kr</language><lastBuildDate>Mon, 24 Oct 2022 00:00:00 +0000</lastBuildDate><image><url>https://siuunni.github.io/media/icon_hu_1c0e9cb08cfb822a.png</url><title>Sieun Kim Portfolio</title><link>https://siuunni.github.io/</link></image><item><title>Unsupervised Conformal Novelty Detection for Hierarchical Data</title><link>https://siuunni.github.io/publications/unsupervised-conformal-novelty-detection/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/publications/unsupervised-conformal-novelty-detection/</guid><description>&lt;hr&gt;
&lt;div style="display:grid;grid-template-columns:160px 1fr;gap:1.5rem 2rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Abstract&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;Electric vehicle (EV) battery packs exhibit a natural pack–module–cell hierarchy, which induces dependence among measurements within the same module. Such hierarchical dependence poses challenges for the direct application of conventional novelty detection methods. To address these challenges, we develop conformal e-value procedures for hierarchical novelty detection, with the goal of controlling the false discovery rate (FDR) at both the group and unit levels. We combine hierarchical conformal score construction with eBH and U-eBH multiple testing procedures, and consider split conformal, full conformal, and group-wise conformal regimes. The proposed methods are evaluated through simulation studies and an analysis of EV battery pack data, where they provide empirical FDR control and detect localized module- and cell-level irregularities.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Type&lt;/div&gt;
&lt;div&gt;Preprint&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Publication&lt;/div&gt;
&lt;div&gt;To be submitted to &lt;em&gt;Journal of the Korean Statistical Society&lt;/em&gt; (JKSS, SCIE)&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Keywords&lt;/div&gt;
&lt;div&gt;novelty detection · hierarchical structure · conformal inference · false discovery rate · multiple testing&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Real-world industrial data — such as EV battery manufacturing — presents three compounding challenges that standard anomaly detection cannot handle jointly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hierarchical dependence:&lt;/strong&gt; Cells within the same module share a common group effect, violating the IID assumption of most methods.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No anomaly labels:&lt;/strong&gt; Ground-truth defect labels are expensive or infeasible to obtain in manufacturing, ruling out supervised approaches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple comparisons:&lt;/strong&gt; Simultaneously testing hundreds of units inflates false discoveries without a principled error-control mechanism.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="method-overview"&gt;Method Overview&lt;/h2&gt;
&lt;p&gt;We frame hierarchical novelty detection as a &lt;strong&gt;multiple hypothesis testing problem&lt;/strong&gt; at two levels simultaneously:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Group-level (HC-GND)&lt;/strong&gt; — Does a test module contain any anomalous cells?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unit-level (HC-UND)&lt;/strong&gt; — Which specific cells within each module are anomalous?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Feature extraction:&lt;/strong&gt; Charging voltage time series are treated as functional observations. Functional PCA (FPCA) projects each cell&amp;rsquo;s charging curve onto a low-dimensional score vector, placing cells from all packs on a common feature space.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_charge_curves.png"
alt="Preprocessed charging voltage curves for all cells in the six test battery packs"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
Preprocessed charging voltage curves for all cells in the six test packs. Normal packs (blue) show regular charging behavior; Abnormal packs 4 and 5 (red) exhibit irregular patterns that are difficult to distinguish visually at the pack level.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_fpca_scatter.png"
alt="FPCA scatter plot separating normal and abnormal battery packs"
style="width:80%;display:block;margin:0 auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
Two-dimensional FPCA score vectors under the split conformal regime. Normal reference packs (black) form a tight cluster, while abnormal test packs (red) appear in a distinct region, validating FPCA as a discriminative feature extraction step.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Nonconformity score:&lt;/strong&gt; For each cell, we compute a &lt;strong&gt;Mahalanobis-distance-based nonconformity score&lt;/strong&gt; relative to a robust trimmed-mean group center. This naturally respects within-group dependence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multiple testing:&lt;/strong&gt; Scores are converted to &lt;strong&gt;conformal e-values&lt;/strong&gt; — non-negative statistics satisfying E[e] ≤ 1 under the null — and tested jointly via the &lt;strong&gt;eBH / U-eBH procedure&lt;/strong&gt;, guaranteeing FDR control under minimal distributional assumptions.&lt;/p&gt;
&lt;p&gt;We implement three conformal regimes with different data-efficiency / robustness trade-offs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Regime&lt;/th&gt;
&lt;th style="text-align: left"&gt;Training data&lt;/th&gt;
&lt;th style="text-align: left"&gt;Contamination risk&lt;/th&gt;
&lt;th style="text-align: left"&gt;Theoretical FDR guarantee&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;HSC&lt;/strong&gt; (Split)&lt;/td&gt;
&lt;td style="text-align: left"&gt;Reference only&lt;/td&gt;
&lt;td style="text-align: left"&gt;None&lt;/td&gt;
&lt;td style="text-align: left"&gt;✓ Both levels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;HFC&lt;/strong&gt; (Full)&lt;/td&gt;
&lt;td style="text-align: left"&gt;Reference + all test&lt;/td&gt;
&lt;td style="text-align: left"&gt;Higher&lt;/td&gt;
&lt;td style="text-align: left"&gt;✓ Group level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;HGC&lt;/strong&gt; (Group-wise)&lt;/td&gt;
&lt;td style="text-align: left"&gt;Reference + one test group&lt;/td&gt;
&lt;td style="text-align: left"&gt;Moderate&lt;/td&gt;
&lt;td style="text-align: left"&gt;✓ Group level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="results"&gt;Results&lt;/h2&gt;
&lt;h3 id="simulation-study"&gt;Simulation Study&lt;/h3&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_h_gnd.png"
alt="HC-GND simulation results: FDR and power under varying outlier proportion and signal strength"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
&lt;strong&gt;HC-GND simulation results.&lt;/strong&gt; Empirical FDR (top) and power (bottom) under varying outlier proportions (left) and signal strengths (right). All three regimes maintain FDR below the target α = 0.1. HFC and HGC achieve higher power than HSC, especially at low outlier proportions, by exploiting more calibration data.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_comparison.png"
alt="HC-UND vs non-hierarchical baselines: FDR and power comparison"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
&lt;strong&gt;HC-UND vs. non-hierarchical baselines.&lt;/strong&gt; The proposed hierarchical methods (HSC, HFC, HGC) consistently outperform non-hierarchical counterparts (SC, FC, AdaDetect) in power while maintaining empirical FDR control. Unit-level anomalies that are subtle in the pooled population become detectable within their own group context.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Key findings across 1,000 simulation replicates (α = 0.1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empirical FDR remains &lt;strong&gt;at or below the target level&lt;/strong&gt; across all outlier proportions and signal strengths.&lt;/li&gt;
&lt;li&gt;At weak signal, power reaches ~&lt;strong&gt;40%&lt;/strong&gt;; as signal increases, power &lt;strong&gt;approaches 100%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Hierarchical methods &lt;strong&gt;outperform non-hierarchical baselines&lt;/strong&gt; by leveraging within-group structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ev-battery-pack-application"&gt;EV Battery Pack Application&lt;/h3&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_pack_wise.png"
alt="Pack-wise comparison of hierarchical and non-hierarchical detection methods"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
&lt;strong&gt;Pack-wise detection results (α = 0.1).&lt;/strong&gt; Left three columns: hierarchical HC-GND/HC-UND results (yellow = module rejection, red = cell rejection). Right three columns: non-hierarchical baselines (SVM, Isolation Forest, AdaDetect). The proposed methods identify localized irregularities in Abnormal Pack 5 across multiple modules and cells that non-hierarchical methods largely miss.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;The proposed procedures detect &lt;strong&gt;localized module- and cell-level irregularities&lt;/strong&gt; not captured by pack-level labels.&lt;/li&gt;
&lt;li&gt;Non-hierarchical baselines concentrate false detections on Normal Pack 0 and miss structured signals in Abnormal Pack 5.&lt;/li&gt;
&lt;li&gt;Results provide an &lt;strong&gt;additional diagnostic layer&lt;/strong&gt; when only coarse pack-level labels are available.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="presentation-slides"&gt;Presentation Slides&lt;/h2&gt;
&lt;div style="margin-top:1rem;"&gt;
&lt;img
src="https://siuunni.github.io/uploads/papers/thesis-page-4.png"
alt="Presentation slide 1 — Overview"
style="width:100%;border:1px solid rgba(148,163,184,.3);border-radius:8px;margin-bottom:1.25rem;"
&gt;
&lt;img
src="https://siuunni.github.io/uploads/papers/thesis-page-5.png"
alt="Presentation slide 2 — Real data application"
style="width:100%;border:1px solid rgba(148,163,184,.3);border-radius:8px;"
&gt;
&lt;/div&gt;</description></item><item><title>배터리 전압·온도 시계열 기반 이상 셀 탐지</title><link>https://siuunni.github.io/projects/battery-anomaly-cell/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/battery-anomaly-cell/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;배터리팩 충전 과정의 &lt;strong&gt;전압 및 온도&lt;/strong&gt; 시계열을 함수형 데이터로 변환하고, 데이터 특성에 맞춰 FPCA와vd-FPCA로 차원을 줄인 뒤, GMM 기반 등각 예측(Conformal Prediction)으로 통계적으로 보장된 이상 탐지 기준을 설계한 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;연구 기간&lt;/div&gt;
&lt;div&gt;2024.05~2025.03&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;KAMP 「전기차 배터리 충전 실험 데이터(품질보증)」 — 셀 176개(16 모듈 × 11 셀) 전압, 온도 측정점 32개(모듈당 2개). 학습은 정상만, 테스트는 정상,이상 혼합&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python,R,scikit-fda, scikit-learn,&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;전압·온도 이상을 &lt;strong&gt;위양성 없이 전수 식별&lt;/strong&gt;(실제,시뮬레이션 데이터 모두 F1 ≈ 1), 유의수준 $\alpha=0.01$ 에서 통계적으로 보장된 커버리지 달성&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;제조 현장의 이상 탐지는 두 가지 제약이 있습니다. &lt;strong&gt;① 이상 데이터를 얻기 어렵고, ② 라벨을 얻기는 더 어렵습니다.&lt;/strong&gt; 이 배터리팩 데이터도 같은 상황이었습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;학습 데이터:&lt;/strong&gt; 전부 &lt;strong&gt;정상&lt;/strong&gt; 상태의 충전 과정만 수집 — 176개 셀 전압 + 32개 온도&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;테스트 데이터:&lt;/strong&gt; 정상·이상이 섞여 있지만, 이상 샘플엔 &lt;strong&gt;이상 발생 시점과 &amp;ldquo;이상이다&amp;quot;라는 이진 라벨만&lt;/strong&gt; 제공. 이상의 &lt;strong&gt;구체적 유형(온도/전압)은 알려주지 않음&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;판정 규칙:&lt;/strong&gt; 전압이든 온도든 한쪽이라도 이상이면 그 배터리팩 전체를 이상으로 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;즉 정상 데이터만으로 정상의 분포를 학습하고, 새 샘플이 그 분포를 벗어나는지를 판단하는 &lt;strong&gt;단일 클래스(novelty) 탐지&lt;/strong&gt; 문제로 접근했습니다. 그리고 &amp;ldquo;몇 % 신뢰수준에서 이상이다&amp;quot;라고 말할 수 있도록, 통계적 보장이 있는 판정 기준이 필요했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="배터리팩-계층-구조"&gt;배터리팩 계층 구조&lt;/h2&gt;
&lt;p&gt;배터리팩은 계층적으로 구성됩니다. 팩 1개 = &lt;strong&gt;모듈 16개&lt;/strong&gt;, 모듈 1개 = &lt;strong&gt;셀 11개&lt;/strong&gt;, 따라서 팩 전체는 &lt;strong&gt;176개 셀&lt;/strong&gt;입니다. 온도는 모듈마다 센서 2개가 달려 총 32개 측정점을 갖습니다. 이 &lt;strong&gt;셀–모듈–팩 계층&lt;/strong&gt;을 그대로 분석 단위에 반영했습니다(온도는 모듈당 2개 센서를 평균내 모듈 대표 온도로 사용).&lt;/p&gt;
&lt;figure style="margin:1.5rem auto;max-width:560px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/battery_pack.png"
alt="전기 자동차용 배터리 팩-모듈-셀"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
배터리 팩은 여러 개의 모듈로 구성되며, 각 모듈은 다수의 셀로 이루어진 계층적 구조를 가졌습니다.[사진 출처: 삼성 SDI]
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="데이터-전처리"&gt;데이터 전처리&lt;/h2&gt;
&lt;p&gt;함수형 데이터 분석은 모든 곡선이 같은 충전 사이클을 담고 있어야 합니다. 그래서 전처리의 핵심은 실제 충전 구간만 정확히 절단하는 것이었습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;① 기본 절단.&lt;/strong&gt; 각 곡선에서 전압 및 온도의 &lt;strong&gt;최솟값 인덱스를 충전 시작점, 최댓값 인덱스를 충전 완료점&lt;/strong&gt;으로 잡아 완전한 충전 사이클을 추출했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;② 변화점 탐지로 정밀 절단.&lt;/strong&gt; 그런데 일부 데이터는 충전 초반에 &lt;strong&gt;최저 전압이 한동안 평평하게 유지&lt;/strong&gt;되는 구간이 있었습니다. 단순히 최솟값의 첫 인덱스를 시작점으로 잡으면, 충전 전 평형 상태까지 끌려 들어가는 문제가 생겼습니다. 그래서 이런 경우에만 선택적으로 &lt;strong&gt;변화점 탐지(ruptures 라이브러리)&lt;/strong&gt; 를 적용해, 감지된 변화점 중 &lt;strong&gt;가장 이른 시점&lt;/strong&gt;을 실제 충전 시작점으로 삼았습니다. 모든 데이터에 적용하면 계산 비용이 크기 때문에, &lt;strong&gt;문제가 되는 곡선에만 선택 적용&lt;/strong&gt;해 효율적으로 처리했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;③ 길이 통일.&lt;/strong&gt; 곡선마다 측정 길이가 달라, 모두 &lt;strong&gt;1초 단위 격자로 선형보간&lt;/strong&gt;하고, 가장 긴 곡선을 기준으로 짧은 곡선은 마지막 값을 연장해 길이를 맞췄습니다. 다만 &lt;strong&gt;온도는 센서별 변화 양상이 너무 달라&lt;/strong&gt; 같은 방식으로 늘리면 본래 패턴이 손상되고 탐지 성능이 떨어졌습니다. 그래서 온도에는 &lt;strong&gt;가변 도메인 함수형 주성분 분석(vd-FPCA)&lt;/strong&gt; 을 적용했습니다. vd-FPCA는 길이가 다른 곡선을 공통 격자로 억지로 맞추지 않고, &lt;strong&gt;도메인 길이를 변수로 한 삼변량 평활(penalized thin-plate spline)로 공분산을 추정하고 길이에 조건부로 고유분해&lt;/strong&gt;하는 방법입니다(
). 덕분에 측정 길이가 제각각인 온도 곡선의 고유한 패턴을 보존하면서 차원을 줄일 수 있었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="함수형-분석"&gt;함수형 분석&lt;/h2&gt;
&lt;p&gt;전압과 온도는 데이터 성격이 달랐습니다. 전압은 곡선 길이가 비교적 일정해 일반 FPCA를 적용했고, 온도는 센서마다 측정 길이가 제각각이라 길이 차이를 다룰 수 있는 vd-FPCA를 적용했습니다.&lt;/p&gt;
&lt;h3 id="전압--fpca--mahalanobis-거리"&gt;전압 — FPCA + Mahalanobis 거리&lt;/h3&gt;
&lt;p&gt;먼저 데이터를 &lt;strong&gt;팩 단위 5:5로 Train / Calibration 으로 분할&lt;/strong&gt;한 뒤, 모든 전압 곡선을 함수형 데이터로 변환했습니다. Train 세트에서 &lt;strong&gt;FPCA&lt;/strong&gt;를 학습해 고유함수(eigenfunction) 집합을 추정하고, Calibration,Test 곡선은 같은 함수공간으로 &lt;strong&gt;정사영&lt;/strong&gt;해 2차원 FPCA 점수 공간에 표현했습니다.&lt;/p&gt;
&lt;p&gt;이어 Train 세트에서 모듈 안 셀들의 전압 벡터로 평균 벡터와 공분산 행렬을 추정했습니다. 팩 $i$, 모듈 $j$, 셀 $k$의 전압 벡터를 $y_{ijk}$ 라 하면 모듈 단위 평균은&lt;/p&gt;
$$\bar{y}_{ij} = \frac{1}{K} \sum_{k=1}^{K} y_{ijk},$$&lt;p&gt;Train 세트 공분산 행렬 $\Sigma$ 는&lt;/p&gt;
$$\Sigma = \frac{1}{|D_{\mathrm{tr}}|}\sum_{i \in D_{\mathrm{tr}}} \sum_{j=1}^{M}\frac{1}{K} \sum_{k=1}^{K}(y_{ijk} - \bar{y}_{ij})(y_{ijk} - \bar{y}_{ij})^{\top}.$$&lt;p&gt;이 평균과 공분산 통해 각 셀이 모듈 분포에서 얼마나 벗어났는지를 &lt;strong&gt;Mahalanobis 거리&lt;/strong&gt;로 측정해, 셀 단위 이상 점수를 정의했습니다. 셀–모듈 계층을 반영하므로, 팩이 이상으로 판정됐을 때 &lt;strong&gt;어느 셀이 원인인지까지 해석&lt;/strong&gt;할 수 있습니다.&lt;/p&gt;
&lt;h3 id="온도--vd-fpca"&gt;온도 — vd-FPCA&lt;/h3&gt;
&lt;p&gt;온도 곡선엔 vd-FPCA를 적용한 후 GMM을 통해 정상 집단과 이상 집단을 군집화했습니다. 주성분 공간에서 온도 이상 데이터는 정상 군집과 멀리 떨어진 $(-25,\,26)$ 부근에 &lt;strong&gt;고립되어 나타났습니다.&lt;/strong&gt; 이런 뚜렷한 분리는 &lt;strong&gt;vd-FPCA가 길이가 다른 온도 곡선의 정상·이상 패턴 차이를 효과적으로 포착&lt;/strong&gt;했음을 보여줍니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem auto;max-width:560px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/battery_temp.png"
alt="온도 vd-FPCA 주성분 점수 공간"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
온도 vd-FPCA 점수 공간. 정상(train·cal·test_temp_ok)은 한 군집을 이루고, 온도 이상(test_temp_ng)은 $(-25,26)$ 부근에 고립됩니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="등각-예측"&gt;등각 예측&lt;/h2&gt;
&lt;p&gt;차원을 줄인 점수 공간 위에서, &lt;strong&gt;등각 예측(Conformal Prediction)&lt;/strong&gt; 으로 이상을 판정했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;왜 등각 예측인가.&lt;/strong&gt; 이 데이터는 이상 샘플이 적고 라벨도 부족합니다. 등각 예측은 점 예측 대신 예측 집합(prediction set)을 내놓는데, 교환가능성(exchangeability)이라는 최소한의 가정만으로 불확실성을 정량화합니다. 핵심은 &lt;strong&gt;모델의 유효성과 무관하게 예측 집합이 참값을 포함할 확률이 설정한 수준 이상으로 유지된다&lt;/strong&gt;는 점입니다. 덕분에 분포 가정을 강하게 두기 어렵고 데이터 수가 적은 이번 같은 상황에서도 유효하게 작동하고, &amp;ldquo;$\alpha$ 수준에서 정상을 이상으로 잘못 볼 확률&amp;quot;을 통제할 수 있습니다.&lt;/p&gt;
&lt;p&gt;적합성 점수와 예측 집합 구성 방식이 다른 &lt;strong&gt;세 가지 임계값 설정 방법&lt;/strong&gt;을 모두 적용해 강건성을 검증했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;정상 테스트 데이터&lt;/strong&gt; — 세 방법 모두에서 예측 영역 &lt;strong&gt;내부&lt;/strong&gt;에 위치해 정상으로 올바르게 분류&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이상 데이터&lt;/strong&gt; — 세 방법 모두에서 예측 영역을 &lt;strong&gt;명확히 벗어나&lt;/strong&gt; 이상으로 정확히 식별. 특히 한 이상 샘플은 정상 군집에서 상당히 멀리 떨어져, 높은 신뢰도로 탐지됨&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;위양성(false positive) 0건&lt;/strong&gt; — 세 방법 모두에서 완벽한 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;figure style="margin:1.5rem auto;max-width:600px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/battery_voltage.png"
alt="전압 적합성 점수 분포와 1% 임계값"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
전압 적합성 점수 분포. 정상(ok)은 낮은 값에 모이고 이상(test_ng)은 큰 값으로 퍼지며, $\alpha=0.01$ 임계값(26.65)을 기준으로 이상이 분리됩니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;→ 전압·온도 양쪽 모두에서 $\alpha=0.01$ 수준의 &lt;strong&gt;통계적으로 보장된 커버리지를 유지하면서&lt;/strong&gt;, 실제·시뮬레이션 데이터 모두 &lt;strong&gt;F1 ≈ 1&lt;/strong&gt; 의 높은 정확도를 달성했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시뮬레이션-검증"&gt;시뮬레이션 검증&lt;/h2&gt;
&lt;p&gt;실제 이상 데이터가 적어, 평균 이동·최댓값/최솟값 이동·시간가변 이동 등 다양한 이상 시나리오를 시뮬레이션으로 생성해 방법론의 강건성을 검증했습니다. 대부분의 시나리오에서 &lt;strong&gt;Accuracy·F1·MCC가 0.94~0.99 수준&lt;/strong&gt;으로 안정적이었습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/battery_sim.png"
alt="시뮬레이션 데이터 성능 요약 표"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
시뮬레이션 이상 시나리오별 성능 요약 (Accuracy·Precision·Recall·F1·MCC).
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;라벨 없는 제조 데이터에 맞춘 설계:&lt;/strong&gt; 정상만으로 분포를 학습하는 novelty 탐지로 접근하고, 셀–모듈–팩 계층 구조를 분석 단위에 반영했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;전압·온도를 특성에 맞게:&lt;/strong&gt; 길이가 일정한 전압엔 FPCA + Mahalanobis 거리를, 길이가 제각각인 온도엔 vd-FPCA를 적용해 각 신호의 패턴을 살렸습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;통계적으로 보장된 판정:&lt;/strong&gt; GMM 기반 등각 예측으로 세 가지 임계값 방법 모두에서 &lt;strong&gt;위양성 없이&lt;/strong&gt; 이상을 전수 식별(F1 ≈ 1)했고, $\alpha=0.01$ 의 커버리지 보장을 확보했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="참고문헌"&gt;참고문헌&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Johns, J. T., Crainiceanu, C., Zipunnikov, V., &amp;amp; Gellar, J. (2019).
. &lt;em&gt;Journal of Computational and Graphical Statistics&lt;/em&gt;, 28(4), 993–1006.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="출처"&gt;출처&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;배터리 팩 사진
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Multi-Agent Large Language Model-Based Economic Dispatch Framework for Optimal Energy Management of Data Center Microgrids</title><link>https://siuunni.github.io/publications/llm-agent-data-center-economic-dispatch/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/publications/llm-agent-data-center-economic-dispatch/</guid><description>&lt;hr&gt;
&lt;div style="display:grid;grid-template-columns:160px 1fr;gap:1.5rem 2rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Abstract&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;The rapid expansion of artificial intelligence (AI) workloads and cloud computing drives a significant rise in hyperscale data centers. This growth in power demand, coupled with extreme load volatility inherent to AI operations, severely destabilizes power grids and complicates energy management. Consequently, data centers increasingly evolve into localized microgrids equipped with distributed energy resources (DERs) and energy storage systems (ESS). However, conventional economic dispatch models—typically based on Mixed-Integer Linear Programming (MILP)—demand specialized optimization expertise and make it difficult to respond flexibly to dynamic business environments, often requiring time-consuming model redesigns whenever tariffs (e.g., Time-of-Use rates) or environmental regulations (e.g., Renewable Energy Certificates) change.&lt;/p&gt;
&lt;p&gt;To address these challenges, this paper proposes a &lt;strong&gt;multi-agent large language model (LLM)-based economic dispatch framework&lt;/strong&gt; for data center microgrids. The model operates through a &lt;strong&gt;four-stage sequential agent architecture&lt;/strong&gt; that lets operators execute complex optimization tasks from natural-language inputs. The efficiency of the framework is validated through simulations using the MIT TX-GAIA data center load profile scaled to 400 MW, configured with small modular reactors (SMR), gas turbines (GT), photovoltaics (PV), and a BESS.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Type&lt;/div&gt;
&lt;div&gt;Conference&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Publication&lt;/div&gt;
&lt;div&gt;To be submitted to &lt;em&gt;CIRED 2026&lt;/em&gt;&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Demo&lt;/div&gt;
&lt;div&gt;&lt;a href="https://datacenteredagent-dbdhwlxmcal5b5vyjlbk4k.streamlit.app" target="_blank" rel="noopener"&gt;Interactive Streamlit app ↗&lt;/a&gt;&lt;/div&gt;
&lt;div style="font-weight:700;padding-top:.1rem;"&gt;Keywords&lt;/div&gt;
&lt;div&gt;LLM agent · economic dispatch · data center microgrid · energy management · multi-agent system&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;p&gt;AI workloads are pushing hyperscale data centers toward extreme, volatile power demand that destabilizes grids. To stay reliable and cost-efficient, data centers are becoming &lt;strong&gt;localized microgrids&lt;/strong&gt; with distributed energy resources and storage. But the conventional way to operate them has real barriers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High expertise barrier:&lt;/strong&gt; MILP-based economic dispatch requires specialized optimization and modeling skills that facility operators rarely have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rigid to change:&lt;/strong&gt; Whenever tariffs (Time-of-Use rates) or regulations (Renewable Energy Certificates) change, the entire model often needs a slow, complete redesign.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slow scenario testing:&lt;/strong&gt; Validating &amp;ldquo;what-if&amp;rdquo; operational strategies is time-consuming under rigid formulations.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="system-configuration"&gt;System Configuration&lt;/h2&gt;
&lt;p&gt;The target is a &lt;strong&gt;grid-connected hyperscale data center microgrid&lt;/strong&gt; sized for AI workloads.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Component&lt;/th&gt;
&lt;th style="text-align: left"&gt;Parameter&lt;/th&gt;
&lt;th style="text-align: left"&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Data Center Load&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Peak load&lt;/td&gt;
&lt;td style="text-align: left"&gt;400 MW (AI/HPC workload)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;SMR&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Unit capacity / ramp / cost&lt;/td&gt;
&lt;td style="text-align: left"&gt;100 MW · 0.75 MW/15 min · ≈ 7 USD/MWh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Gas Turbine (GT)&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Unit capacity / ramp / fuel&lt;/td&gt;
&lt;td style="text-align: left"&gt;170 MW · 15 MW/min · LNG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;ESS&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Energy / power / efficiency / SOC&lt;/td&gt;
&lt;td style="text-align: left"&gt;160 MWh · 40 MW · 95% · 10–90%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Load modeling.&lt;/strong&gt; The MIT Supercloud &lt;em&gt;TX-GAIA&lt;/em&gt; HPC dataset — chosen for its high volatility relative to commercial data centers — was normalized from its native 300 kW scale up to a 400 MW peak and resampled to a 15-minute resolution (96 steps over 24 hours):&lt;/p&gt;
$$P_{load}(t) = \frac{P_{raw}(t)}{P_{raw}^{max}} \times 400\ \text{MW}$$&lt;p&gt;&lt;strong&gt;Generator modeling.&lt;/strong&gt; The GT uses a quadratic cost function $C_{GT}(P) = aP^2 + bP + c$ (derived via GasTurb at 800 KRW/kg LNG) capturing partial-load efficiency drop, with a 15 MW/min ramp limit. The SMR (SMART-100, 100 MW) operates as baseload at 7 USD/MWh with a strict 0.75 MW/15 min ramp limit for operational safety.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="method-overview"&gt;Method Overview&lt;/h2&gt;
&lt;p&gt;We propose a &lt;strong&gt;four-stage sequential multi-agent LLM pipeline&lt;/strong&gt; that converts a natural-language prompt into an optimized dispatch schedule — no manual model rebuilding required.&lt;/p&gt;
&lt;figure style="margin:1.5rem auto;max-width:560px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_llm_agent_architecture.png"
alt="Four-stage multi-agent LLM architecture: parsing, formulation, solver, explanation"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
Four-stage agent architecture. An infeasibility-feedback loop returns from the solver to the formulation agent when constraints cannot be satisfied.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Parsing Agent&lt;/strong&gt; — extracts optimization parameters from the user&amp;rsquo;s natural-language prompt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formulation Agent&lt;/strong&gt; — translates the parameters into a formal mathematical model (objective + constraints).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solver Agent&lt;/strong&gt; — executes the computational dispatch and returns the optimal schedule.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explanation Agent&lt;/strong&gt; — synthesizes the numerical results into a comprehensive, human-readable strategic report.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A feedback loop returns infeasibility signals from the solver back to the formulation stage, enabling automatic correction without operator intervention.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="mathematical-formulation"&gt;Mathematical Formulation&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt; — minimize total daily operational cost $J$ (base demand charge + generation + grid purchase − sales revenue + ESS degradation):&lt;/p&gt;
$$\min J = C_{base} + \sum_{t=1}^{T} \Big[ \sum_{i \in \mathcal{G}} C_{gen,i}(P_i(t)) + \rho_{grid}(t)P_{grid}(t) - R_{sales}(t) + \sum_{k \in \mathcal{E}} \lambda_{deg} P_{dis,k}(t) \Big]$$&lt;p&gt;&lt;strong&gt;Key constraints:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Power balance&lt;/strong&gt; — supply equals demand at every step $t$ (grid + generators + PV + ESS discharge = load + ESS charge).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESS dynamics&lt;/strong&gt; — $SOC(t) = SOC(t-1) + \big(P_{chg}(t)\eta - P_{dis}(t)/\eta\big)\Delta t / E_{cap}$, with round-trip efficiency $\eta = 0.95$ and $10\% \le SOC(t) \le 90\%$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generator limits&lt;/strong&gt; — capacity bounds $P_{min,i} \le P_i(t) \le P_{max,i}$ and ramp limits $|P_i(t) - P_i(t-1)| \le Ramp_i$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Solver Agent casts this as a &lt;strong&gt;Mixed-Integer Quadratic Program (MIQP)&lt;/strong&gt; and solves it with &lt;strong&gt;Gurobi&lt;/strong&gt; for the global cost-minimizing optimum.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="results"&gt;Results&lt;/h2&gt;
&lt;p&gt;The framework was validated on the &lt;strong&gt;MIT TX-GAIA data center load profile scaled to 400 MW&lt;/strong&gt; over a 24-hour horizon, with a portfolio of small modular reactors (SMR), gas turbines (GT), photovoltaics (PV), and a BESS.&lt;/p&gt;
&lt;!-- &lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_llm_optimization_result.png"
alt="Optimization result: cost-based dispatch schedule across generation sources over 24 hours"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
Cost-based optimal dispatch over 24 hours. SMR provides stable baseload, while ESS and gas turbines are dispatched for peak shaving during expensive Time-of-Use periods.
&lt;/figcaption&gt;
&lt;/figure&gt; --&gt;
&lt;div style="display:flex;flex-wrap:wrap;gap:1rem;margin:1.5rem 0;justify-content:center;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_report_page1.png"
alt="Data Center Energy Dispatch Report — page 1: summary metrics and dispatch chart"
style="flex:1 1 320px;max-width:48%;min-width:300px;display:block;border:1px solid rgba(148,163,184,.3);border-radius:10px;background:#fff;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_report_page2.png"
alt="Data Center Energy Dispatch Report — page 2: cost, dispatch and TOU analysis"
style="flex:1 1 320px;max-width:48%;min-width:300px;display:block;border:1px solid rgba(148,163,184,.3);border-radius:10px;background:#fff;"&gt;
&lt;/div&gt;
&lt;p&gt;Key findings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SMR as baseload:&lt;/strong&gt; The framework seamlessly utilizes the SMR for stable baseload supply (~121 MW average, capacity factor ~100%).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Peak shaving:&lt;/strong&gt; ESS and gas turbines are dispatched strategically for peak shaving during expensive TOU periods.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost structure:&lt;/strong&gt; Total cost was driven primarily by dispatch strategy — baseload generation accounted for only ~2.5% of total cost, while variable operating cost dominated at ~90.9%, confirming that operational decisions matter more than raw asset mix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive testbed:&lt;/strong&gt; The pipeline serves as a rapid, interactive testbed for verifying strategies against uncertainties in cost, load dynamics, and grid stability — and scales to other load systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;!--
## Generated Report
The **Explanation Agent** automatically synthesizes the optimization output into a full technical report — dispatch chart, cost structure, dispatch strategy, TOU operation analysis, and recommendations. Below is an example report generated end-to-end by the agent pipeline:
&lt;div style="display:flex;flex-wrap:wrap;gap:1rem;margin:1.5rem 0;justify-content:center;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_report_page1.png"
alt="Data Center Energy Dispatch Report — page 1: summary metrics and dispatch chart"
style="flex:1 1 320px;max-width:48%;min-width:300px;display:block;border:1px solid rgba(148,163,184,.3);border-radius:10px;background:#fff;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/fig_report_page2.png"
alt="Data Center Energy Dispatch Report — page 2: cost, dispatch and TOU analysis"
style="flex:1 1 320px;max-width:48%;min-width:300px;display:block;border:1px solid rgba(148,163,184,.3);border-radius:10px;background:#fff;"&gt;
&lt;/div&gt;
&lt;div style="margin:1rem 0;"&gt;
&lt;a href="https://siuunni.github.io/uploads/papers/llm-data-center-energy-report.pdf" target="_blank" rel="noopener"
style="display:inline-flex;align-items:center;gap:.5rem;background:rgba(59,130,246,.15);border:1px solid rgba(59,130,246,.4);border-radius:8px;padding:.5rem 1rem;font-size:.9rem;color:#60a5fa;text-decoration:none;font-weight:600;"&gt;
📄 Download full report (PDF)
&lt;/a&gt;
&lt;/div&gt; --&gt;
&lt;hr&gt;
&lt;h2 id="future-work"&gt;Future Work&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capacity optimization:&lt;/strong&gt; Move from fixed capacities to optimal sizing of GTs and ESS for a given load profile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PV curtailment &amp;amp; RE100:&lt;/strong&gt; Add objective penalty terms for curtailed renewables and minimum-usage constraints to meet sustainability targets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conformal prediction:&lt;/strong&gt; Integrate distribution-free prediction intervals with guaranteed coverage into the demand-forecasting module, letting the Formulation Agent build &lt;strong&gt;uncertainty-aware&lt;/strong&gt; robust optimization models that hedge against AI-workload volatility — reducing the risk of shortage or over-generation.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="try-the-live-demo"&gt;Try the Live Demo&lt;/h2&gt;
&lt;p&gt;The full agent pipeline is deployed as an interactive web app. Enter a natural-language scenario and watch the agents parse, formulate, solve, and explain the optimal dispatch in real time.&lt;/p&gt;
&lt;div style="margin:1rem 0;"&gt;
&lt;a href="https://datacenteredagent-dbdhwlxmcal5b5vyjlbk4k.streamlit.app" target="_blank" rel="noopener"
style="display:inline-flex;align-items:center;gap:.5rem;background:rgba(34,197,94,.15);border:1px solid rgba(34,197,94,.4);border-radius:8px;padding:.55rem 1.1rem;font-size:.95rem;color:#4ade80;text-decoration:none;font-weight:600;"&gt;
🚀 Launch the Streamlit App
&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>다이캐스팅 공정데이터 이상 탐지</title><link>https://siuunni.github.io/projects/diecasting-anomaly/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/diecasting-anomaly/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;다이캐스팅 공정의 시계열 패턴을 기반으로 불량을 예측하고, SHAP·CCF로 불량의 주요 원인을 해석한 제조데이터 분석 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;대회&lt;/div&gt;
&lt;div&gt;제4회 K-인공지능 제조데이터 분석 경진대회 (KAMP, 2024)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2024.10~2024.11(약 2주)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;다이캐스팅 공정 시계열 2,852,465 cells (92,015 rows × 31 columns)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · pandas · NumPy · scikit-learn · XGBoost · SHAP · Matplotlib&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Accuracy 0.9970 · Recall 0.9501 · Precision 0.9794 · F1 0.9646&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;다이캐스팅은 금형(Die)에 녹인 금속을 고압으로 주입해 제품을 만드는 주조 공법으로, &lt;strong&gt;압력·속도·시간·온도&lt;/strong&gt; 4대 조건을 일정하게 유지하는 것이 중요합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;주요 변수의 &lt;strong&gt;시계열적 특성이 크게 변동&lt;/strong&gt;하거나 일정 패턴을 벗어날 때 불량이 빈번하게 발생합니다.&lt;/li&gt;
&lt;li&gt;현장 관리자는 변수의 실시간 변동은 볼 수 있지만, &lt;strong&gt;그 패턴이 불량에 어떤 영향을 미치는지&lt;/strong&gt; 구체적으로 파악하기 어렵습니다.&lt;/li&gt;
&lt;li&gt;특히 중소기업은 설비 운영이 작업자 경험에 의존해 체계적 관리가 어렵습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ &lt;strong&gt;시계열 패턴이 불량에 기여하는 정도를 정량적으로 설명&lt;/strong&gt;하는 모델이 필요합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="접근-방법"&gt;접근 방법&lt;/h2&gt;
&lt;p&gt;불량(수율 영향인자)을 &lt;strong&gt;다섯 가지 관점&lt;/strong&gt;으로 나누어 시계열 특성을 반영했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;현재 상태&lt;/strong&gt; — 변수의 현재 값이 불량에 미치는 즉각적 영향&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;변동성&lt;/strong&gt; — 일정 기간의 변동성이 품질에 미치는 영향&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;변화 추세&lt;/strong&gt; — 이동평균 기반 장기적 변화 방향의 누적 영향&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;계절성&lt;/strong&gt; — 연중 시기에 따른 품질 변화&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시간대&lt;/strong&gt; — 하루 중 밤/낮 변화&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="데이터-전처리--파생변수"&gt;데이터 전처리 &amp;amp; 파생변수&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;롤링 윈도우(window=5)&lt;/strong&gt; 로 각 공정 변수의 이동평균과 이동 변동계수를 생성했습니다. 변수 특성에 따라 금형코드·가열로 단위로 그룹화하여 계산했습니다.&lt;/li&gt;
&lt;li&gt;시계열 특성을 위해 연중 며칠째인지(계절성)와 하루 중 시간대의 주기성을 나타내는 파생변수를 추가했습니다.&lt;/li&gt;
&lt;li&gt;유효 범위 외 이상치는 결측 처리 후 평균으로 대체하여 일관성을 유지했고, 데이터 &lt;strong&gt;완전성·정확성·무결성 품질지수 100&lt;/strong&gt;을 달성했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;T-검정 결과 모든 파생변수의 p-value &amp;lt; 0.05&lt;/strong&gt; 로, 생성 변수가 품질에 유의한 영향을 미침을 확인했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="ccf-분석--시차를-고려한-영향력-검증"&gt;CCF 분석 — 시차를 고려한 영향력 검증&lt;/h2&gt;
&lt;p&gt;교차상관함수(Cross-Correlation Function)로 각 공정 변수가 &lt;strong&gt;지연 시간(lag)&lt;/strong&gt; 에 따라 불량 판정에 미치는 상관관계를 분석했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem auto;max-width:560px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/diecast_ccf.png"
alt="변수의 지연시간에 따른 CCF"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
변수의 지연시간(lag)에 따른 CCF. CCF가 양수면 변수 증가 시 불량 확률 증가, 음수면 정상 확률 증가를 의미합니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="예측-모델--xgboost"&gt;예측 모델 — XGBoost&lt;/h2&gt;
&lt;p&gt;금형코드·가열로 같은 범주형 변수와 비선형 상호작용이 많은 제조데이터 특성에 강점이 있는 &lt;strong&gt;XGBoost&lt;/strong&gt;를 채택했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;클래스 불균형 처리:&lt;/strong&gt; 불량 비율이 낮은 문제를 보정하기 위해 불량 클래스에 더 높은 가중치를 부여했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데이터 분할:&lt;/strong&gt; 클래스 비율을 유지하며 학습·검증·테스트로 분할했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;모델&lt;/th&gt;
&lt;th style="text-align: center"&gt;Accuracy&lt;/th&gt;
&lt;th style="text-align: center"&gt;Recall&lt;/th&gt;
&lt;th style="text-align: center"&gt;Precision&lt;/th&gt;
&lt;th style="text-align: center"&gt;F1 Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Random Forest&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9965&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9377&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9817&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9592&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;AdaBoost&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9936&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.8928&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9572&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9239&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Decision Tree&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9957&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9327&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9664&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.9492&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;XGBoost&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.9970&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.9501&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.9794&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.9646&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="xai--shap-기반-불량-원인-해석"&gt;XAI — SHAP 기반 불량 원인 해석&lt;/h2&gt;
&lt;p&gt;SHAP(Shapley Additive Explanations)로 각 변수가 불량 발생에 기여하는 정도를 정량화했습니다. 각 변수를 현재상태/변화추세/변동성 특성으로 나누어 합산했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/diecast_shap_combined.png"
alt="요인별 품질 기여도 및 주요 변수별 SHAP 통합 그래프"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
요인별 품질 기여도(좌)와 변수별 종합 영향(우). 빨간색은 품질 저하 요인, 파란색은 개선 요인. &lt;strong&gt;lower_mold_temp1, upper_mold_temp2&lt;/strong&gt; 등 금형 온도 변수가 주요 불량 인자로 나타났습니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="개별-생산품-진단-예시"&gt;개별 생산품 진단 예시&lt;/h3&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/diecast_shap_abnormal.png"
alt="비정상으로 분류된 11번 생산품 SHAP 분석"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
&lt;strong&gt;불량 생산품(11번):&lt;/strong&gt; 현재 상태와 변동성이 큰 품질 저하 요인. upper_mold_temp1·lower_mold_temp1의 온도 현재 상태가 불량에 강하게 기여.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/diecast_shap_normal.png"
alt="정상으로 분류된 4번 생산품 SHAP 분석"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
&lt;strong&gt;정상 생산품(4번):&lt;/strong&gt; 대부분 변수가 품질 개선에 기여. molten_temp가 일부 저하 요인이나 다른 변수가 이를 상쇄.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="기대-효과"&gt;기대 효과&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;체계적 공정관리:&lt;/strong&gt; 제품 생산 시점마다 공정 변수의 현재 상태·변동성을 평가해 품질 저하 요인을 즉시 조정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비용 절감:&lt;/strong&gt; 가벼운 트리 기반 모델로 고성능 컴퓨팅 자원 없이 수 분 내 분석 및 해석이 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;확장성:&lt;/strong&gt; 온도 및 습도를 다루는 다른 제조 공정(예: 레진 도포, 경화)으로도 확장 가능하며, 불균형한 범주형 데이터에서 &lt;strong&gt;F1 0.980&lt;/strong&gt;의 높은 예측력을 보였습니다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>시계열 센서 데이터 기반 자동차 엔진 이상 탐지</title><link>https://siuunni.github.io/projects/ford-engine-anomaly/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/ford-engine-anomaly/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;500개 센서의 시계열 데이터로 자동차 엔진의 정상/이상을 판별하고, Grad-CAM·SHAP로 모델의 판단 근거를 해석한 딥러닝 이상 탐지 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;수업&lt;/div&gt;
&lt;div&gt;심층신경망특론 기말 프로젝트 (인하대학교 통계데이터사이언스학)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2024.10 ~ 2024.12&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;Ford 오픈 데이터셋 — 4,921개 시계열 샘플 × 500개 센서 (학습 3,601 / 테스트 1,320, 정상 1 / 이상 −1)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · TensorFlow/Keras · scikit-learn · XGBoost · SHAP · NumPy&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;1D-CNN 정확도 94.69% · AUC 0.95&lt;/strong&gt; 로 세 모델 중 최고 성능 달성&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;엔진은 자동차 동력의 심장과도 같아서, 이상이 생기면 곧바로 안전 문제로 이어집니다. 실제로 최근 5년간 접수된 자동차 결함 신고에서 &lt;strong&gt;엔진 관련 문제가 가장 큰 비중&lt;/strong&gt;을 차지했습니다. 그래서 엔진에 부착된 센서를 실시간으로 들여다보며 이상 징후를 미리 잡아내는 일이 점점 더 중요해지고 있습니다.&lt;/p&gt;
&lt;p&gt;저희는 이 문제를 &lt;strong&gt;이진 분류&lt;/strong&gt;로 풀기로 했습니다. 한 시점에서 측정된 센서 값들을 보고 그 순간 엔진이 정상인지 아닌지를 가려내는 것입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;입력:&lt;/strong&gt; 특정 시점 $t$ 에 측정된 500개 센서 값&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;타깃:&lt;/strong&gt; 그 시점의 엔진 상태 — 정상(1) / 이상(−1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;목표:&lt;/strong&gt; 500개 센서만으로 현재 엔진 이상 여부를 정확히 판별&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="데이터-탐색"&gt;데이터 탐색&lt;/h2&gt;
&lt;p&gt;어떤 모델을 쓸지 정하기 전에, 데이터가 &lt;strong&gt;시간적으로, 또 센서 간 공간적으로 어떤 구조를 갖는지&lt;/strong&gt;부터 살펴봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;① 시간적으로는 거의 무관했습니다.&lt;/strong&gt; ACF/PACF를 보니 &lt;strong&gt;lag 1 이후로는 시간적 상관이 사라져&lt;/strong&gt;, 타깃이 사실상 백색잡음(white noise)처럼 움직였습니다. 이는 과거 시점을 길게 기억하는 RNN 계열의 장점이 여기서는 작동하지 않는다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;② 반면 센서끼리는 강하게 얽혀 있었습니다.&lt;/strong&gt; 센서 사이에는 뚜렷한 선형 상관 클러스터가 보였고, 특히 &lt;strong&gt;번호가 가까운 센서일수록 상관이 강했습니다&lt;/strong&gt;(예: 10–13번 구간은 음의 상관, 1–3번 구간은 양의 상관). 즉 이상을 가르는 단서는 시간이 아니라 &lt;strong&gt;가까이 붙은 센서들이 함께 만드는 국소 패턴&lt;/strong&gt;에 있었습니다. PCA로 약 66개 주성분까지 줄여도 봤지만 성능이 오히려 떨어져서, &lt;strong&gt;500개 센서를 그대로 쓰기로&lt;/strong&gt; 했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ford_sensor_corr.png"
alt="센서 간 2D·3D 상관관계 시각화"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
센서 간 0.6 이상 강한 상관관계 (좌: 2D, 우: 3D). 번호가 인접한 센서끼리 선형 클러스터를 형성합니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;→ 이 두 가지를 종합해 &lt;strong&gt;&amp;ldquo;시간보다 인접 센서의 국소 패턴이 더 중요하다&amp;rdquo;&lt;/strong&gt; 는 가설을 세웠고, 그런 패턴을 잡아내는 데 강한 &lt;strong&gt;1D-CNN&lt;/strong&gt;을 가장 유력한 후보로 두었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="데이터-전처리"&gt;데이터 전처리&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;시계열 누수 막기:&lt;/strong&gt; 클래스별 80% 지점 중 더 뒤쪽 시점을 공통 기준으로 잡아 나눴습니다. 이렇게 해야 미래 데이터가 학습에 새어드는 &lt;strong&gt;시간적 누수(leakage)&lt;/strong&gt; 를 막을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;클래스 비율 유지:&lt;/strong&gt; 정상/이상 비율을 그대로 유지하며 나눠 한쪽으로 치우치지 않게 했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정규화:&lt;/strong&gt; Standard와 Min-Max Scaler를 비교해, 센서마다 다른 단위,범위를 같은 스케일로 맞췄습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="후보-모델--최적화"&gt;후보 모델 &amp;amp; 최적화&lt;/h2&gt;
&lt;p&gt;접근 방식이 서로 다른 세 모델을 같은 데이터 위에서 나란히 비교해봤습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;관점&lt;/th&gt;
&lt;th style="text-align: left"&gt;모델&lt;/th&gt;
&lt;th style="text-align: left"&gt;설계 의도&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;트리 기반&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;XGBoost&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;센서별 중요도 기반 분류&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;순환 신경망&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;LSTM&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;게이트로 시간 의존성 학습&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;합성곱 신경망&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;1D-CNN&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;인접 센서의 국소 패턴 추출&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;XGBoost.&lt;/strong&gt; grid search로 하이퍼파라미터를 맞춰봤지만, Train Loss는 떨어지는데 &lt;strong&gt;Validation Loss는 제자리&lt;/strong&gt;인 전형적인 과적합 양상을 보였습니다. AUC도 0.75에 머물렀습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LSTM.&lt;/strong&gt; 정규화 방식과 유닛 수를 바꿔가며 세 번 돌려보았고, 그중 &lt;strong&gt;유닛을 256개로 키운 설정&lt;/strong&gt;이 정확도 92.88%로 가장 좋았습니다. AUC 0.93으로 성능은 높았지만 과적합 기미가 조금 있었고, 무엇보다 &lt;strong&gt;학습에 1시간이 넘게&lt;/strong&gt; 걸렸습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1D-CNN.&lt;/strong&gt; 데이터 탐색에서 본 &amp;ldquo;좌우 15개 안팎의 센서가 강하게 얽힌다&amp;quot;는 특징을 그대로 설계에 반영했습니다. 첫 레이어 커널을 &lt;strong&gt;30&lt;/strong&gt;으로 넓게 잡아 큰 패턴부터 보고, 이후 &lt;strong&gt;15 → 7 → 3&lt;/strong&gt; 으로 좁혀가며 국소 패턴을 단계적으로 잡도록 했습니다. 각 Conv 블록에는 BatchNorm과 Dropout(0.2)을 넣어 과적합을 눌렀습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="모델링-결과"&gt;모델링 결과&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;모델&lt;/th&gt;
&lt;th style="text-align: center"&gt;Test Accuracy&lt;/th&gt;
&lt;th style="text-align: center"&gt;Test Loss&lt;/th&gt;
&lt;th style="text-align: center"&gt;AUC&lt;/th&gt;
&lt;th style="text-align: center"&gt;Confusion (TP·TN·FP·FN)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;XGBoost&lt;/td&gt;
&lt;td style="text-align: center"&gt;74.92%&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.5521&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.75&lt;/td&gt;
&lt;td style="text-align: center"&gt;470 · 519 · 162 · 169&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;LSTM&lt;/td&gt;
&lt;td style="text-align: center"&gt;92.88%&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.2973&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.93&lt;/td&gt;
&lt;td style="text-align: center"&gt;567 · 659 · 22 · 72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;1D-CNN&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;94.69%&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.1338&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.95&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;608 · 643 · 38 · 31&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;결과적으로 &lt;strong&gt;1D-CNN이 정확도·안정성·속도 어느 쪽으로 봐도 가장 좋았습니다.&lt;/strong&gt; Train과 Validation Loss가 나란히 수렴해 과적합이 없었고, 학습 시간도 약 10분으로 LSTM(1시간+)의 6분의 1 수준이었습니다. 데이터 탐색에서 세운 &amp;ldquo;시간보다 국소 공간 패턴이 중요하다&amp;quot;는 가설이 성능으로 확인되었습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ford_cnn_arch.png"
alt="최종 1D-CNN 아키텍처"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
최종 1D-CNN 아키텍처. 4개 Conv1D 블록(BatchNorm·ReLU·Dropout) → Global Average Pooling → Dense.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="xai--모델은-무엇을-보고-판단했나"&gt;XAI — 모델은 무엇을 보고 판단했나&lt;/h2&gt;
&lt;p&gt;정확도가 높다고 해서 모델을 곧바로 믿을 수는 없습니다. 따라서 &lt;strong&gt;Grad-CAM&lt;/strong&gt;과 &lt;strong&gt;SHAP&lt;/strong&gt;로 &amp;ldquo;CNN이 대체 어디를 보고 이상이라 판단했는지&amp;quot;를 들여다봤습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grad-CAM:&lt;/strong&gt; 이상일 때 센서 활성화 값이 약 0.25, 정상일 때 약 0.12로 갈렸습니다. 모델이 &lt;strong&gt;이상이라고 볼 때 센서 신호를 훨씬 또렷하게 잡아낸다&lt;/strong&gt;는 뜻입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SHAP:&lt;/strong&gt; 두 방법 모두에서 &lt;strong&gt;번호가 서로 가까운 센서들&lt;/strong&gt;(Grad-CAM은 472·428, SHAP은 471·429)이 핵심으로 꼽혔습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure style="margin:1.5rem auto;max-width:440px;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ford_shap.png"
alt="센서 번호별 SHAP 중요도"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
센서 번호별 SHAP 중요도. 인접 센서가 함께 중요 특징으로 나타납니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ford_gradcam.png"
alt="단일 샘플 및 전체 샘플 센서 중요도"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
(좌) 단일 샘플의 센서별 중요도 (우) 전체 샘플에서 중요도 0.8 이상인 센서의 빈도.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;→ 두 해석 결과가 &lt;strong&gt;상당히 겹쳤고&lt;/strong&gt;, 모두 인접 센서의 선형 패턴을 가리켰습니다. 처음 EDA에서 세운 가설을 모델이 실제로 그렇게 작동하고 있다는 것을 확인할 수 있었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;데이터를 보고 모델을 골랐다:&lt;/strong&gt; &amp;ldquo;시간 상관은 약하고 인접 센서의 공간 상관이 강하다&amp;quot;는 EDA 결과를 근거로 1D-CNN을 택했고, 성능이 그 판단을 뒷받침했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;세 모델을 비교했다:&lt;/strong&gt; XGBoost(0.75) &amp;lt; LSTM(0.93) &amp;lt; &lt;strong&gt;1D-CNN(0.95, 정확도 94.69%)&lt;/strong&gt; — 성능도 속도도 앞선 CNN을 최종 모델로 채택했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;왜 맞췄는지까지 확인했다:&lt;/strong&gt; Grad-CAM과 SHAP가 같은 결론을 내, 인접 센서의 선형 패턴이 이상 판별의 핵심이라는 점을 분명히 했습니다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>텍스트 기반 이미지 색채화 품질 개선</title><link>https://siuunni.github.io/projects/image-colorization/</link><pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/image-colorization/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;텍스트 설명을 따라 흑백 이미지를 색채화하는 생성형 AI 프로젝트입니다. 여러 공개 색채화 모델을 비교하고, 텍스트 의미를 반영하는 추론 파이프라인을 구축했습니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;대회&lt;/div&gt;
&lt;div&gt;2025 INHA AI Challenge, 대학원생 부문 3위&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2025.06 ~ 2025.07(약 1달ㄴ)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;과제&lt;/div&gt;
&lt;div&gt;텍스트(캡션) 조건부 흑백→컬러 이미지 생성, 텍스트 의미 일치도 기반 Score 평가&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python, PyTorch, Diffusers, SAM(Segment Anything), OpenCLIP, NumPy&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;최종 &lt;strong&gt;Score 0.70&lt;/strong&gt; 달성 (베이스라인 대비 약 17~32% 향상)&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;텍스트 설명을 입력으로 받아 흑백 이미지를 색채화하되, 결과 색상이 텍스트 의미와 일치해야 하는 과제입니다. &amp;ldquo;빨간 셔츠를 입은 사람&amp;quot;이라는 설명이 있으면 실제로 그 셔츠가 빨갛게 칠해져야 점수를 받습니다.&lt;/p&gt;
&lt;p&gt;핵심은 어떤 모델을 쓰느냐보다, 어떤 모델과 추론 전략의 조합이 텍스트 의미를 더 잘 반영하느냐를 실험으로 찾는 것이었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-공개-모델-비교"&gt;1. 공개 모델 비교&lt;/h2&gt;
&lt;p&gt;먼저 색채화 분야의 주요 사전학습 모델들을 같은 데이터와 환경에서 비교했습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;모델&lt;/th&gt;
&lt;th style="text-align: center"&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Unicolor&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ControlNet&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ControlColor&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.57&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;COCO-LC&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;L-CAD (튜닝 후 최종)&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.70&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;같은 조건에서 L-CAD가 가장 좋았고, 이를 메인 모델로 삼아 최적화에 집중했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-추론-파라미터-튜닝"&gt;2. 추론 파라미터 튜닝&lt;/h2&gt;
&lt;p&gt;초기 실험에서 두 가지 문제가 있었습니다. 같은 입력인데도 랜덤 시드에 따라 색이 달라졌고, 텍스트 의미와 맞지 않는 색이 나오기도 했습니다.&lt;/p&gt;
&lt;p&gt;디퓨전 모델의 결과는 모델 구조만큼이나 추론 설정에 좌우됩니다. 그래서 주요 추론 파라미터를 조정하며 결과의 안정성과 의미 일관성을 확인했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DDIM Steps&lt;/strong&gt; — 샘플링 단계 수에 따른 품질, 안정성 변화&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance Scale&lt;/strong&gt; — 텍스트 조건을 얼마나 강하게 반영할지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strength&lt;/strong&gt; — 원본 구조를 얼마나 보존할지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-Attention Guidance(SAG)&lt;/strong&gt; — 생성 결과의 일관성 보정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;여러 차례 실험을 거쳐, 성능을 떨어뜨리지 않으면서 결과 변동성을 줄이는 설정을 찾았습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-객체-단위-앙상블"&gt;3. 객체 단위 앙상블&lt;/h2&gt;
&lt;p&gt;단일 모델의 한계를 확인하기 위해, 객체별로 더 나은 모델 결과를 골라 합치는 앙상블을 설계했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SAM(Segment Anything)&lt;/strong&gt; 으로 이미지 안의 객체를 분리&lt;/li&gt;
&lt;li&gt;각 객체에 대해 COCO-LC와 L-CAD 결과를 모두 생성&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenCLIP&lt;/strong&gt; 이미지–텍스트 유사도로 객체마다 텍스트 의미에 더 맞는 결과를 선택해 합성&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 방식은 COCO-LC 단일 모델(0.60) 대비 0.686까지 점수를 올렸지만, 최적화한 L-CAD 단일 모델(0.70)에는 못 미쳤습니다. 객체 경계를 합성하는 과정에서 생기는 부자연스러움이 앙상블의 이점을 상쇄한 것으로 보입니다.&lt;/p&gt;
&lt;p&gt;결국 앙상블보다 L-CAD 단일 모델의 추론 최적화가 더 효과적이어서, 이를 최종 제출안으로 택했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;div style="display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;align-items:start;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/colorization_input.png" alt="흑백 입력 이미지"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/colorization_lcad_2.png" alt="L-CAD 색채화 결과 1"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/colorization_lcad_1.png" alt="L-CAD 색채화 결과 2"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;/div&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
최종 L-CAD 색채화 결과. 좌측 흑백 입력을 텍스트 의미에 맞게 자연스럽게 색채화한 모습입니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="결과"&gt;결과&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;단계&lt;/th&gt;
&lt;th style="text-align: center"&gt;Score&lt;/th&gt;
&lt;th style="text-align: left"&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;최고 베이스라인 (COCO-LC)&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.60&lt;/td&gt;
&lt;td style="text-align: left"&gt;공개 모델 비교 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;SAM + OpenCLIP 객체 앙상블&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.686&lt;/td&gt;
&lt;td style="text-align: left"&gt;단일 모델보다 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;L-CAD 단일 최적화 (최종)&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.70&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;최종 채택&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;최저 베이스라인(ControlNet 0.53) 대비 약 32%, COCO-LC(0.60) 대비 약 17% 향상&lt;/li&gt;
&lt;li&gt;2025 INHA AI Challenge 대학원생 부문 3위&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모델 비교로 메인 선정:&lt;/strong&gt; Unicolor, ControlNet, ControlColor, COCO-LC, L-CAD를 같은 조건에서 비교해 L-CAD를 메인 모델로 정했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;추론 최적화:&lt;/strong&gt; DDIM, Guidance, SAG 등 추론 파라미터를 조정해 의미 일관성을 유지하면서 변동성을 줄였습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앙상블 검증:&lt;/strong&gt; SAM과 OpenCLIP으로 객체 단위 앙상블을 설계해 비교한 결과, 이 과제에서는 단일 모델 최적화가 더 나았고 최종 Score 0.70을 달성했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>전기차 주행가능거리 기반 충전소 추천 시스템</title><link>https://siuunni.github.io/projects/ev-solution/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/ev-solution/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;전기차의 실시간 &lt;strong&gt;BMS(배터리 관리 시스템)&lt;/strong&gt; 데이터로 주행가능거리를 예측하고, 실제 주행 경로 위에서 도달 가능한 충전소를 실시간 추천하는 시스템입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2024.03 ~ 2024.06(알파프로젝트)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;담당 역할&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;주행가능거리 예측 모델링 · 경로 추천 알고리즘 구현 · GUI 개발&lt;/strong&gt;&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;전기차(BMW i3) BMS 주행 로그 — 배터리 전압·전류, SoC, 속도, 거리, 온도 등&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · pandas · NumPy · LSTM(TensorFlow/Keras) · Selenium · BeautifulSoup · Naver Map API · Arduino·ESP(IoT)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;주행가능거리 예측 &lt;strong&gt;MAE 0.03 · MSE 0.005&lt;/strong&gt; 달성&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;전기차 운전자는 &amp;ldquo;지금 배터리로 어디까지 갈 수 있고, 그 안에 충전소가 있는가&amp;quot;를 늘 신경 써야 합니다. 여기엔 두 가지 어려움이 있었습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;배터리 잔량만으로는 주행가능거리 예측이 어렵다.&lt;/strong&gt; 동일한 SoC라도 주행 환경·운전 습관·도로 조건에 따라 실제 갈 수 있는 거리가 크게 달라집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;방향 정보가 없으면 엉뚱한 충전소를 추천한다.&lt;/strong&gt; 실시간 GPS·경로 정보가 없으면, 주행 방향과 반대편에 있는 충전소를 추천하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;그래서 &lt;strong&gt;① BMS 데이터로 주행가능거리를 예측 → ② 실제 주행 경로 위에서 도달 가능한 충전소를 추천&lt;/strong&gt;하는 흐름을 설계했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-주행가능거리--1차-계산"&gt;1. 주행가능거리 — 1차 계산&lt;/h2&gt;
&lt;p&gt;BMS에서 들어오는 &lt;strong&gt;배터리 전압 및 전류&lt;/strong&gt;로 실시간 전력을 구하고, 누적 에너지 소비와 회생제동(에너지 회수)까지 반영해 주행가능거리를 계산했습니다. 배터리 전류가 음수면 회생제동으로 에너지를 회수하는 상태로 간주했습니다.&lt;/p&gt;
$$P_{[kW]} = \frac{V_{\text{batt}} \times I_{\text{batt}}}{1000}, \qquad \text{소비율}_{[kWh/km]} = \frac{E_{[kWh]}}{\text{거리}_{[km]}}$$$$\text{주행가능거리} = \frac{\dfrac{SoC}{100}\times C_{\text{batt}} + (E_{\text{회수}} \cdot \mathbb{1}[P&lt;0])}{\max(|P|,\,0.1)}$$&lt;p&gt;(BMW i3 배터리 용량 $C_{\text{batt}} = 42.2\,\text{kWh}$ 기준)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;한계 진단 — SoC 상관분석.&lt;/strong&gt; 계산한 주행가능거리가 타당한지 SoC를 비롯한 변수들과의 상관관계로 검증했습니다. 그 결과 &lt;strong&gt;주행가능거리와 SoC의 상관(≈0.35)이 낮았고&lt;/strong&gt;, 아래 산점도처럼 같은 배터리 잔량(SoC)에서도 추정 주행거리가 크게 퍼져 &lt;strong&gt;단순 계산식만으로는 한계&lt;/strong&gt;가 있음을 확인했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;div style="display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;align-items:start;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_soc_corr_1.png"
alt="변수들 간 Heat map"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_soc_corr_2.png"
alt="배터리 잔량(SoC)과 추정 주행거리의 상관계수"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;/div&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
배터리 잔량(SoC)과 추정 주행거리의 상관계수가 0.35로 두 변수간에 선형적인 특징이 매우 약하다는 것을 알 수 있습니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_soc_scatter.png"
alt="배터리 잔량(SoC)과 추정 주행거리의 괴리"
style="width:80%;display:block;margin:0 auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
배터리 SoC(%) vs 추정 주행거리(km). 같은 잔량에서도 주행거리가 넓게 퍼져 있어, 잔량만으로는 정확한 예측이 어렵다는 것을 보여줍니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="2-주행가능거리--동적-소비율-보정--lstm-예측"&gt;2. 주행가능거리 — 동적 소비율 보정 + LSTM 예측&lt;/h2&gt;
&lt;p&gt;단순 계산식의 한계를 넘기 위해, 주행 데이터의 변동성과 비선형 패턴을 반영하는 두 단계를 추가했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;동적 소비율 보정:&lt;/strong&gt; 주행 중 변동성을 반영하도록 &lt;strong&gt;가중 이동 평균 소비율(MAAEC)&lt;/strong&gt; 과 &lt;strong&gt;보정식(AAEC)&lt;/strong&gt; 을 설계해, 순간적인 가속·회생제동에 휘둘리지 않는 안정적인 소비율을 산출했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LSTM 시계열 예측:&lt;/strong&gt; 보정된 소비율 위에 &lt;strong&gt;LSTM 기반 시계열 모델&lt;/strong&gt;을 결합해, 주행 환경·운전 습관에 따른 &lt;strong&gt;비선형 주행 패턴&lt;/strong&gt;을 학습했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 그 결과 주행가능거리 예측에서 &lt;strong&gt;MAE 0.03, MSE 0.005&lt;/strong&gt; 의 높은 성능을 달성해, 1차 계산식의 한계를 크게 개선했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-경로-기반-충전소-추천"&gt;3. 경로 기반 충전소 추천&lt;/h2&gt;
&lt;p&gt;방향을 무시한 추천 문제를 해결하기 위해, &lt;strong&gt;실제 주행 경로&lt;/strong&gt;를 반영한 추천 알고리즘을 구현했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;네이버 길찾기 API&lt;/strong&gt; 로 현재 위치에서 후보 충전소까지의 실제 주행 경로(도달 거리)를 계산&lt;/li&gt;
&lt;li&gt;예측된 &lt;strong&gt;주행가능거리와 연동&lt;/strong&gt;해, 도달 가능한 충전소만 필터링&lt;/li&gt;
&lt;li&gt;그 안에서 &lt;strong&gt;최소 거리&lt;/strong&gt; 충전소를 추천하고, 네이버 지도를 실시간 크롤링한 충전소 정보(개방·충전 속도·이용 가능 대수 등)와 함께 &lt;strong&gt;GUI로 시각화&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_recommend_gui.png"
alt="실시간 전기차 충전소 추천 GUI"
style="width:80%;display:block;margin:0 auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
실시간 충전소 추천 GUI — 현재 위치와 도달 가능한 충전소 위치를 지도에 함께 표시
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;데이터 수집:&lt;/strong&gt; 충전소 현황은 GPS 위치를 기준으로 &lt;strong&gt;네이버 지도를 Selenium·BeautifulSoup으로 크롤링&lt;/strong&gt;해 이름·거리·개방 여부·충전 속도·이용 가능 대수를 수집하고 DataHub에 저장했습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="4-사용자-대시보드--데모-시스템"&gt;4. 사용자 대시보드 &amp;amp; 데모 시스템&lt;/h2&gt;
&lt;p&gt;운전자가 한눈에 보도록 &lt;strong&gt;실시간 대시보드&lt;/strong&gt;(주행가능거리·배터리 잔량·배터리 온도·주변 충전소 목록)를 구성했습니다. 실제 전기차 대신 &lt;strong&gt;Arduino·ESP 기반 모형 전기차&lt;/strong&gt;로 BMS-유사 데이터를 클라우드로 전송해 전체 흐름을 시연했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_dashboard_1.png"
alt="전기차 충전 최적화 대시보드"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/ev_dashboard_2.png"
alt="전기차 충전소 추천 대시보드"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
EV charging optimization 및 충전소 추천 대시보드 — 주행가능거리,배터리 잔량,온도,주변 충전소 현황을 실시간 표시
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;예측 모델링:&lt;/strong&gt; 단순 계산식의 한계(SoC 상관 ≈0.35)를 진단하고, 동적 소비율 보정(MAAEC·AAEC) + LSTM 시계열 모델로 &lt;strong&gt;MAE 0.03 · MSE 0.005&lt;/strong&gt; 달성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;경로 추천 알고리즘:&lt;/strong&gt; 네이버 길찾기 API로 실제 주행 경로를 계산해, 예측 주행가능거리와 연동한 &lt;strong&gt;방향까지 고려한 충전소 추천&lt;/strong&gt;을 구현.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;End-to-end:&lt;/strong&gt; 데이터 수집(크롤링) → 주행가능거리 예측 → 경로 기반 추천 → 대시보드·모형 전기차 데모까지 전 과정을 완성.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- --- --&gt;
&lt;!--
## 링크
- [GitHub — N4 AIoT Project](https://github.com/statjhw/N4-AIot-Project) --&gt;</description></item><item><title>지역별 태양광 발전량 예측 및 운영 솔루션</title><link>https://siuunni.github.io/projects/solar-ev-solution/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/solar-ev-solution/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;전국 17개 지역의 태양광 발전량을 예측하고, 패널 상태 진단 및 수익 예측을 제공하는 운영 솔루션을 개발한 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;대회·과정&lt;/div&gt;
&lt;div&gt;K-Software Empowerment BootCamp (KSEB) 3기 — 신세계 I&amp;C 기업협력 프로젝트 (팀 5명)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;담당 역할&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;팀장(PM) · 모델링 총괄&lt;/strong&gt; — 일정,역할 관리부터 전체 예측 모델링(날씨·발전량·패널 분류) 설계·구현을 담당&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;전국 17개 지역 태양광 발전량·날씨 관측·예보 데이터 (2017–2023, 공공데이터포털·기상자료개방포털)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · LightGBM · scikit-learn · TensorFlow/Keras · FastAPI · Streamlit · MySQL · AWS(EC2·RDS)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;발전량 예측 RMSE ~10% 개선&lt;/strong&gt;, &lt;strong&gt;패널 상태 분류 정확도 85%&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;태양광 발전은 효율이 약 12%로 수력(80 ~ 90%),화력(45 ~ 50%),원자력(30 ~ 40%)에 비해 낮고, &lt;strong&gt;일사·일조·적운·적설 등 날씨에 크게 좌우&lt;/strong&gt;되어 발전량이 일정하지 않습니다. 재생에너지 3020 정책으로 발전소가 급증하는 가운데, 안정적 운영과 전력 거래를 위해서는 &lt;strong&gt;지역별 발전량 예측&lt;/strong&gt;이 필수적입니다.&lt;/p&gt;
&lt;p&gt;이 프로젝트는 전국 17개 지역의 태양광 발전량을 예측하고, 패널 상태 진단를 제공하는 운영 솔루션을 목표로 했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시스템-구조"&gt;시스템 구조&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;왜 날씨를 먼저 예측하고, 그 예측값으로 발전량을 예측했나?&lt;/strong&gt;
태양광 발전량은 일사량·일조시간 같은 &lt;strong&gt;관측 날씨&lt;/strong&gt;에 의해 결정됩니다. 그런데 우리가 알고 싶은 건 &lt;em&gt;미래&lt;/em&gt;의 발전량이고, 미래의 관측 날씨는 아직 존재하지 않습니다. 따라서 &lt;strong&gt;① 기상 예보로 미래의 관측 날씨를 먼저 예측 → ② 예측된 날씨로 미래 발전량을 예측&lt;/strong&gt;하는 2단계 구조를 설계했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;왜 패널 상태 분류까지 만들었나?&lt;/strong&gt;
발전량을 아무리 정확히 예측해도, 현장의 패널이 먼지,새똥,손상 등으로 제대로 관리되지 않으면 실제 발전량은 예측을 따라가지 못합니다. 따라서 예측을 &lt;strong&gt;운영·관리 시스템의 일부&lt;/strong&gt;로 완성하기 위해, 발전량이 예측보다 낮을 때 혹은 미리 패널 상태를 진단해 관리할 수 있도록 패널 상태 분류 모델을 함께 만들었습니다.&lt;/p&gt;
&lt;p&gt;이 두 가지 이유로 아래 &lt;strong&gt;3단계 파이프라인&lt;/strong&gt;을 설계했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;날씨 예측&lt;/strong&gt; — 기상 예보 데이터로 미래의 관측 날씨(일사·일조 등)를 예측&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;발전량 예측&lt;/strong&gt; — 예측된 관측 날씨로 지역별 태양광 발전량을 예측&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;패널 상태 분류&lt;/strong&gt; &lt;em&gt;(관리)&lt;/em&gt; — 발전량이 예측보다 낮을 때 패널 상태를 진단해 원인을 파악&lt;/li&gt;
&lt;/ol&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_pipeline.png"
alt="예측 파이프라인 다이어그램"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
예보 → 관측 날씨 예측 → 발전량 예측으로 이어지는 파이프라인 (패널 상태 분류는 관리·진단)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="1-날씨-예측-모델"&gt;1. 날씨 예측 모델&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;목표:&lt;/strong&gt; 전날 17시에 발표되는 기상 예보를 입력으로, 다음날의 실제 &lt;strong&gt;관측 날씨&lt;/strong&gt;(일사,일조,습도,지면온도,기온,풍속 등)를 예측합니다. 발전량 예측의 입력이 되는 단계라 정확도가 전체 파이프라인의 토대가 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;기상청 매칭 &amp;amp; 변수 선별.&lt;/strong&gt; 발전소마다 위치가 다르므로, &lt;strong&gt;설비용량으로 가중한 위·경도&lt;/strong&gt;를 계산해 각 지역에서 가장 가까운 기상청을 매칭했습니다. 이후 발전량과 상관계수 절댓값 0.2 이상인 날씨 변수만 선별하고, 결측은 Random Forest 기반 반복 대치(Iterative Imputer)로, 전부 결측인 경우는 인접한 날짜 데이터로 보완했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;핵심 — 일사·일조량이 없는 지역의 직접 계산 + 구름 가중치 파생변수.&lt;/strong&gt;
일부 지역(울산,세종,경북 등)은 일사량 및 일조시간이 관측되지 않아, 발전량 예측의 가장 중요한 입력이 비어 있는 문제가 있었습니다. 이를 인접 지역 값으로 대체하면 정확도가 크게 떨어졌습니다. 그래서 &lt;strong&gt;물리적으로 직접 계산하는 방식&lt;/strong&gt;을 설계했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;위·경도 + 시간으로 이론적 일사량 계산:&lt;/strong&gt; 태양의 고도 및 방위는 위경도와 시각으로 결정되므로, 이를 이용해 &lt;em&gt;맑은 하늘 기준&lt;/em&gt; 이론적 일사량과 일조시간을 직접 산출했습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;구름 가림을 가중치로 반영:&lt;/strong&gt; 실제로는 구름이 햇빛을 가리므로, 그날의 하늘 상태를 가중치로 곱해 보정했습니다. 예보의 하늘 상태 코드별로 가중치를 부여했습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;하늘 상태&lt;/th&gt;
&lt;th style="text-align: center"&gt;매우 맑음&lt;/th&gt;
&lt;th style="text-align: center"&gt;맑음&lt;/th&gt;
&lt;th style="text-align: center"&gt;구름 조금&lt;/th&gt;
&lt;th style="text-align: center"&gt;구름 많음&lt;/th&gt;
&lt;th style="text-align: center"&gt;흐림&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;가중치&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;1.0&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.8&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.5&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.3&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;→ &lt;strong&gt;조정된 일사량 = 이론적 일사량 × 하늘 상태 가중치&lt;/strong&gt; 로 파생변수를 생성해, 관측값이 없는 지역에서도 발전량 예측에 쓸 수 있는 입력을 확보했습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;모델 선택.&lt;/strong&gt; LSTM·LightGBM·XGBoost·Random Forest를 같은 데이터로 비교한 결과(서울 기준 RMSE), 기온,습도,일사량처럼 특성이 다른 변수들의 상호작용을 안정적으로 처리하는 &lt;strong&gt;Random Forest&lt;/strong&gt;가 가장 우수해 최종 채택했습니다. 학습에 한 번도 쓰지 않은 3일치 데이터에서도 일사 RMSE 0.1, 일조 RMSE 0.06으로 안정적인 성능을 보였습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_weather_forecast.png"
alt="Random Forest 날씨 예측 결과 — 일사·일조·습도·지면온도·기온·풍속"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
학습에 사용하지 않은 기간의 날씨 변수별 실제(True) vs 예측(Predicted) 비교.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="2-태양광-발전량-예측-모델"&gt;2. 태양광 발전량 예측 모델&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;입력 설계.&lt;/strong&gt; 1단계에서 예측한 관측 날씨에, 태양광이 시계열 특성을 갖는다는 점을 반영해 피처를 추가했습니다. 날짜 피처(연.월.일.요일)에 더해, 발전량이 전날의 발전량·날씨에 영향받는다는 사실을 담은 &lt;strong&gt;과거 발전량(lag)·이동평균&lt;/strong&gt; 시계열 피처를 생성했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;왜 군집화 후 군집별로 모델을 만들었나.&lt;/strong&gt; 같은 전국 데이터라도 일사량·일조시간 수준에 따라 발전 패턴이 크게 달라집니다. 하나의 모델로 전 구간을 학습하면 평균적인 패턴에 묻혀 버리므로, 발전에 영향이 큰 &lt;strong&gt;일사량·일조시간을 기준으로 K-means 군집화&lt;/strong&gt;(Elbow로 군집 수를 3개로 최적화)한 뒤 &lt;strong&gt;각 군집마다 별도의 LightGBM&lt;/strong&gt;을 학습시켜, 발전 강도대별로 특화된 예측이 가능하도록 했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;왜 LightGBM인가.&lt;/strong&gt; 대규모 데이터에서도 학습이 빠르고, 결측 처리와 다양한 변수의 비선형 상호작용에 강하며, 과적합 방지에 장점이 있어 복잡한 시계열 특성을 가진 태양광 발전량 예측에 적합했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_cluster_result.png"
alt="군집별 LightGBM 발전량 예측 결과 (Cluster 0·1·2)"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
일사·일조 수준으로 나눈 3개 군집(Cluster 0·1·2) 각각에 LightGBM을 적용한 실제(Actual) vs 예측(Predicted) 결과. 발전 강도대별로 특화 학습해 각 구간에서 예측이 실제를 잘 따라갑니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;결과 — 데이터 품질에 따라 예측 성능이 갈렸다.&lt;/strong&gt; 시계열 피처와 군집별 모델 적용으로 서울시 기준 &lt;strong&gt;RMSE 0.57 → 0.52, MAE 0.38 → 0.33&lt;/strong&gt; 로 예측력이 약 &lt;strong&gt;10% 향상&lt;/strong&gt;됐고, 강원도(RMSE 18.62 → 15.67, MAE 12.26 → 10.04) 등 다른 지역에서도 비슷한 개선을 확인했습니다. 다만 &lt;strong&gt;대전처럼 데이터 품질이 낮은(일사 및 일조량이 관측되지 않아 인접 지역 값으로 대체한) 지역에서는 모델이 충분히 학습하지 못해 예측 성능이 낮았습니다.&lt;/strong&gt; 즉 같은 모델이라도 입력 데이터의 품질이 예측 정확도를 좌우했으며, 이 한계가 1단계에서 일사량을 직접 계산·보정한 이유와 직접 연결됩니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;div style="display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;align-items:start;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_forecast_good.png"
alt="데이터 품질이 좋은 지역의 발전량 예측"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.4rem;box-sizing:border-box;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_forecast_mid.png"
alt="중간 품질 지역의 발전량 예측"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.4rem;box-sizing:border-box;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_forecast_bad.png"
alt="데이터 품질이 낮은 지역의 발전량 예측"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.4rem;box-sizing:border-box;"&gt;
&lt;/div&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
학습에 사용하지 않은 기간의 실제(파랑) vs 예측(빨강) 발전량. &lt;strong&gt;데이터 품질이 좋을수록 예측이 실제와 거의 일치&lt;/strong&gt;하고, 품질이 낮은 지역일수록 오차가 커졌습니다.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="3-태양광-패널-상태-분류"&gt;3. 태양광 패널 상태 분류&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;왜 만들었나.&lt;/strong&gt; 발전량을 정확히 예측해도, 패널이 먼지,새똥,손상 등으로 관리되지 않으면 실제 발전량은 예측을 따라가지 못합니다. 그래서 &lt;strong&gt;&amp;ldquo;예측 발전량 vs 실제 발전량&amp;quot;의 괴리를 진단하는 관리 도구&lt;/strong&gt;로, 패널 상태를 분류하는 모델을 만들었습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;모델.&lt;/strong&gt; 패널 이미지를 &lt;strong&gt;DenseNet121&lt;/strong&gt;로 6개 상태(정상,새똥,먼지,전기적 결함,물리적 손상,눈 덮임)로 분류했습니다. 적은 데이터에서도 잘 작동하는 구조라 선택했고, 데이터 증강으로 다양한 상황에 강건하도록 학습했습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;결과.&lt;/strong&gt; 전체 정확도 &lt;strong&gt;75% → (정제 테스트셋) 85%&lt;/strong&gt; 를 달성했으며, 눈 덮임(Snow-Covered) 클래스는 F1 0.93으로 특히 높은 성능을 보였습니다. 학습 곡선에서 Loss가 안정적으로 수렴해 과적합 없이 학습이 잘 이뤄졌습니다.&lt;/p&gt;
&lt;div style="display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;align-items:stretch;margin:1.5rem 0;max-width:760px;"&gt;
&lt;figure style="margin:0;display:flex;flex-direction:column;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/solar_panel_training.png"
alt="DenseNet121 학습 곡선 (Training Loss &amp; Accuracy)"
style="display:block;width:100%;height:auto;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;box-sizing:border-box;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
학습 곡선 — Loss 안정 수렴
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;div class="compact-table"&gt;
&lt;style&gt;
.compact-table { display: flex; }
.compact-table table { margin: 0; font-size: .82rem; height: 100%; width: 100%; }
.compact-table th, .compact-table td { padding: .15rem .5rem !important; line-height: 1.25 !important; border: none !important; }
.compact-table tbody tr { border: none !important; }
&lt;/style&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;클래스&lt;/th&gt;
&lt;th style="text-align: center"&gt;P&lt;/th&gt;
&lt;th style="text-align: center"&gt;R&lt;/th&gt;
&lt;th style="text-align: center"&gt;F1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Bird-drop&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.68&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.85&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Clean&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.72&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.74&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.73&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Dusty&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.81&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.55&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Electrical-damage&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.71&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.79&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Physical-Damage&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.70&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.54&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.61&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Snow-Covered&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.89&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.96&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.93&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.75&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Macro avg&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.75&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.74&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Weighted avg&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.75&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.75&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.74&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-서비스화--배포"&gt;4. 서비스화 &amp;amp; 배포&lt;/h2&gt;
&lt;p&gt;예측 모델을 실제 사용 가능한 웹 솔루션으로 구현했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;백엔드:&lt;/strong&gt; FastAPI + SQLAlchemy로 MySQL(AWS RDS)과 연동, 하루 한 번 &lt;strong&gt;배치 처리&lt;/strong&gt;로 지역별 예측을 미리 계산·저장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프론트엔드:&lt;/strong&gt; Streamlit으로 17개 지역 지도·발전량 그래프·기간별 예측 제공&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;수익 예측:&lt;/strong&gt; 예상 발전량에 SMP(계통한계가격)·REC(신재생에너지공급인증서)를 곱해 &lt;strong&gt;예상 수익 = (SMP + REC) × 발전량&lt;/strong&gt; 산출&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;배포:&lt;/strong&gt; AWS EC2(백엔드+Streamlit 통합 호스팅), RDS(MySQL)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="pm으로서의-기여"&gt;PM으로서의 기여&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모델링 총괄:&lt;/strong&gt; 날씨 예측 → 발전량 예측 → 패널 분류로 이어지는 전체 ML 파이프라인을 직접 설계·구현했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;일정·역할 관리:&lt;/strong&gt; 프론트엔드·백엔드·도메인 조사로 나뉜 5인 팀의 작업을 조율하고, 모델·서비스·배포가 한 흐름으로 통합되도록 관리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;확장 비전:&lt;/strong&gt; IoT·디지털 트윈과 결합한 AIoT 생태계로의 확장 방향을 제시했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- ---
## 링크
- [GitHub — AI/모델링](https://github.com/white9812/notimportant_ai)
- [GitHub — Web](https://github.com/statjhw/SunForecastWeb) --&gt;</description></item><item><title>LG Aimers 6기: 난임 시술 임신 성공률 예측</title><link>https://siuunni.github.io/projects/lg-aimers/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/lg-aimers/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;난임 환자 시술 데이터로 임신 성공을 예측하는 LG Aimers 6기 해커톤 프로젝트입니다. 예선과 본선의 평가 방식 차이에 맞춰 모델 전략을 다르게 설계했습니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;대회&lt;/div&gt;
&lt;div&gt;LG Aimers 6기 — 난임 환자 대상 임신 성공 예측 AI 온라인 해커톤 (팀 간지포s)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2024.01 ~ 2024.05&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;난임 환자 IVF(체외수정) 시술 데이터 (배아·난자 상태, 연령, 시술 이력 등)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · CatBoost · LightGBM · AutoGluon · Optuna · scikit-learn · pandas&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;예선 0.70 → 0.74&lt;/strong&gt;로 본선 진출, &lt;strong&gt;본선 0.64 → 0.66&lt;/strong&gt; 개선, &lt;strong&gt;최종 7위&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;난임 환자의 IVF 시술 데이터를 바탕으로 &lt;strong&gt;임신 성공&lt;/strong&gt;을 예측하는 과제입니다. 정밀한 예측은 의료진의 임상 의사결정과 환자 상담을 보조할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예선과 본선의 예측 대상(target)과 평가 방식이 달라&lt;/strong&gt;, 이에 맞춰 모델링 전략을 완전히 다르게 가져갔습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;&lt;/th&gt;
&lt;th style="text-align: left"&gt;예선&lt;/th&gt;
&lt;th style="text-align: left"&gt;본선&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;예측 대상&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;임신 성공 &lt;strong&gt;여부 (0 또는 1)&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;임신 성공 &lt;strong&gt;확률 (0~1 연속값)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;문제 유형&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;이진 분류&lt;/td&gt;
&lt;td style="text-align: left"&gt;확률 회귀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;평가 지표&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ROC-AUC&lt;/td&gt;
&lt;td style="text-align: left"&gt;Weighted Brier + F1 혼합 Score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;핵심 전략&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CatBoost + AutoGluon 앙상블&lt;/td&gt;
&lt;td style="text-align: left"&gt;가중치 손실 설계 + Stacking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="공통--데이터-전처리--파생변수"&gt;공통 — 데이터 전처리 &amp;amp; 파생변수&lt;/h2&gt;
&lt;p&gt;두 라운드 모두 의미 있는 파생변수 설계에 집중했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;문자열 → 수치 변환:&lt;/strong&gt; &lt;code&gt;&amp;quot;0회&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;1-5회&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;&amp;gt;20&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;6회 이상&amp;quot;&lt;/code&gt; 같은 범위형 문자열을 중앙값 추정 또는 기준값+1 방식으로 수치화했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결측치 처리:&lt;/strong&gt; NaN을 대체하고 결측 존재 여부 플래그를 추가했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비율·상호작용 변수:&lt;/strong&gt; 단순 수치 대신 의미 있는 파생변수를 생성했습니다.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;배아 관련:&lt;/strong&gt; 배아 이식 비율, ICSI(미세주입) 배아 비율, 배아 저장 비율, 배아 품질 지표&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;난자 관련:&lt;/strong&gt; 난자 수정시도 비율, 난자 배아 생성 성공률, 신선/해동 난자 여부&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시술·연령 관련:&lt;/strong&gt; 이전 시술 총 횟수, 시술 경험 점수, 고위험 연령군, 연령 가중치, 이식 후 적정기간&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;상관관계 분석으로 임신 성공에 유의미한 핵심 변수를 선별했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/lg_correlation.png"
alt="임신 성공 확률과 상관관계가 높은 상위 30개 변수"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
임신 성공 확률과의 상관계수 상위 30개 변수 (초록: 양의 상관, 빨강: 음의 상관)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="예선--임신-성공-여부-이진-분류"&gt;예선 — 임신 성공 여부 (이진 분류)&lt;/h2&gt;
&lt;p&gt;예선은 임신 성공을 &lt;strong&gt;0/1 이진 분류&lt;/strong&gt;로 예측하고 &lt;strong&gt;ROC-AUC&lt;/strong&gt;로 평가했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CatBoost + Optuna:&lt;/strong&gt; 범주형 변수 처리에 강한 CatBoost를 사용하고, Optuna로 8개 하이퍼파라미터를 Stratified 5-Fold 교차검증 기반으로 튜닝했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AutoGluon:&lt;/strong&gt; TabularPredictor로 다양한 모델을 자동 탐색(HPO)해 예측 확률을 얻었습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weighted mean 앙상블:&lt;/strong&gt; 두 모델의 예측을 가중평균해 최종 확률을 산출했습니다.&lt;/li&gt;
&lt;/ul&gt;
$$\hat{y} = \frac{\text{CatBoost} + 2 \times \text{AutoGluon}}{3}$$&lt;p&gt;→ 단일 모델 대비 앙상블로 &lt;strong&gt;점수 0.70에서 0.74로 향상&lt;/strong&gt;, 본선에 진출했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="본선--임신-성공-확률-회귀"&gt;본선 — 임신 성공 확률 (회귀)&lt;/h2&gt;
&lt;p&gt;본선은 임신 성공을 &lt;strong&gt;0~1 사이 연속 확률&lt;/strong&gt;로 예측해야 했고, &lt;strong&gt;평가 지표 자체가 바뀌었습니다.&lt;/strong&gt; 단순 정밀도가 아니라 &lt;strong&gt;확률 정확도(Weighted Brier)와 이진 분류 성능(F1)을 절반씩 섞은 점수&lt;/strong&gt;였습니다.&lt;/p&gt;
$$\text{Score} = 0.5 \times \left(1 - \frac{\sum w_i (y_i - \hat{y}_i)^2}{\sum w_i}\right) + 0.5 \times \frac{2TP}{2TP + FP + FN}$$&lt;p&gt;이 지표에 맞춰 두 가지 전략을 새로 설계했습니다.&lt;/p&gt;
&lt;h3 id="1-가중치-기반-손실-설계"&gt;1. 가중치 기반 손실 설계&lt;/h3&gt;
&lt;p&gt;평가식의 가중치 $w_i = 1 + 4y_i + (0.5 - y_i)^2$ 를 학습 손실에 반영해, &lt;strong&gt;임상적으로 중요한 임신 성공(희귀 클래스) 케이스에 더 민감하게&lt;/strong&gt; 반응하도록 유도했습니다. 예측값은 확률로 출력 가능하도록 Calibration 친화적인 모델을 사용했습니다.&lt;/p&gt;
&lt;h3 id="2-catboost--lightgbm-stacking"&gt;2. CatBoost + LightGBM Stacking&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stage 1:&lt;/strong&gt; CatBoost로 예측값과 잔차(residual)를 계산&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stage 2:&lt;/strong&gt; CatBoost 출력값 + 잔차를 LightGBM의 입력으로 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CatBoost의 범주형 처리·일반화 능력에 더해, LightGBM이 예측 오류 영역을 보완하도록 했습니다. 마지막으로 Stacking 예측을 CatBoost 단독 예측으로 보정하는 Ensemble 비율을 실험적으로 탐색해 &lt;strong&gt;최적 비율(n=3)&lt;/strong&gt; 을 도출했습니다.&lt;/p&gt;
$$\hat{y}_{final} = \frac{n \cdot \hat{y}_{stacking} + \hat{y}_{catboost}}{n + 1}, \quad n = 3$$&lt;p&gt;→ 본선 &lt;strong&gt;점수 0.64에서 0.66으로 개선&lt;/strong&gt;, &lt;strong&gt;최종 7위&lt;/strong&gt;를 달성했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;평가 방식에 맞춘 모델 설계:&lt;/strong&gt; 예선(이진 분류·ROC-AUC)과 본선(확률 회귀·가중 혼합 Score)의 차이를 정확히 반영해 전략을 분리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;본선의 핵심 기여:&lt;/strong&gt; 평가식의 가중치를 손실 함수에 직접 반영하고, CatBoost+LightGBM Stacking으로 예측 성능과 안정성을 동시에 확보했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;해석 가능성:&lt;/strong&gt; 의학적 맥락에 맞춘 비율·상호작용 파생변수로 해석 가능한 예측 구조를 설계했습니다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>대구 빅데이터 분석 경진대회: IT/SW 기업 성장성 판단</title><link>https://siuunni.github.io/projects/daegu-bigdata/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/daegu-bigdata/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;기업의 성장 잠재력을 정량적으로 파악해 전략적 기업 대출(여신) 기준을 제안한 빅데이터 분석 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;대회&lt;/div&gt;
&lt;div&gt;제5회 대구 빅데이터 분석 경진대회 — &lt;strong&gt;우수상 수상&lt;/strong&gt;&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2023.05~2023.08&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;데이터&lt;/div&gt;
&lt;div&gt;IT/SW기업 생태계 실태조사, 대구·경북 ITSW기업, 현대카드·대구BC카드 매출, 시장금리(KOSIS)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · R · pandas · NumPy · scikit-learn · statsmodels · missingpy&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Random Forest 회귀 RMSE 0.0269&lt;/strong&gt; 달성&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="문제-정의"&gt;문제 정의&lt;/h2&gt;
&lt;p&gt;대구·경북 지역 예금은행의 기업 대출은 특정 서비스업에 집중되어, 성장 잠재력이 높은 IT/SW·벤처 기업에 자금이 충분히 공급되지 못하는 &lt;strong&gt;자금 배분 비효율&lt;/strong&gt; 문제가 있었습니다.&lt;/p&gt;
&lt;p&gt;기존 여신 심사는 최근 3개년 재무제표·담보 중심이라 &lt;strong&gt;미래 성장 잠재력을 반영하지 못합니다.&lt;/strong&gt; 본 프로젝트는 신용 서류에 드러나지 않는 요인까지 반영해 &lt;strong&gt;성장 잠재력 기반의 새로운 여신 기준&lt;/strong&gt;을 제안합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="접근-방법"&gt;접근 방법&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;카드 매출 분석&lt;/strong&gt; — 현대카드·대구BC카드 데이터로 IT/비IT 산업의 매출액 증감률을 시장금리와 함께 분석해 산업 성장성을 파악합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;성장 업종 추출&lt;/strong&gt; — 한국 산업 평균 증감률보다 높은 업종(정보통신업, 전문·과학·기술 서비스업)을 선별합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;성장 잠재력 예측 모델&lt;/strong&gt; — 기업 데이터를 통합해 &lt;em&gt;매출액 대비 연구개발비 투자금액&lt;/em&gt; 파생변수를 종속변수로, 성장성 관련 요인을 독립변수로 하는 회귀 모델을 구축합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="카드-데이터-분석--산업별-매출-성장성"&gt;카드 데이터 분석 — 산업별 매출 성장성&lt;/h2&gt;
&lt;p&gt;5년간(2017–2021) 카드 매출을 월별로 집계해 IT/비IT 산업의 매출액 증감률을 시장금리 추세와 비교했습니다. 팬데믹 이후 두 산업 모두 매출이 감소했으나, &lt;strong&gt;비IT 산업(관광·여가)의 감소폭이 더 컸습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/daegu_sales_growth.png"
alt="IT산업과 비IT산업의 매출액 증감률 및 시장금리 추세"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
IT산업·비IT산업의 매출액 증감률과 시장금리 추세 (2017–2021)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="데이터-전처리--파생변수"&gt;데이터 전처리 &amp;amp; 파생변수&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;데이터 통합:&lt;/strong&gt; 사업자등록번호를 기준으로 여러 기업 데이터를 병합하고, 범주형·논리형 자료를 정수형으로 처리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결측치 대치:&lt;/strong&gt; 무응답·결측이 많은 변수를 &lt;strong&gt;MissForest&lt;/strong&gt;(Random Forest 기반 반복 대치)로 보완했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;종속변수 설계:&lt;/strong&gt; 기업가치평가의 가중평균자본비용(WACC) 개념을 차용해, &lt;em&gt;매출액 대비 연구개발비 투자금액&lt;/em&gt;의 연도별 변화율에 가중치(0.4 / 0.6)를 부여한 성장성 지표를 만들었습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;독립변수:&lt;/strong&gt; 기업부설 연구소 유무, 특허 등록·출원 건수, SW 융합 기술 분야별 시장 전망 등 신용 서류에 없는 변수를 활용했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="차원-축소--적합성-검정"&gt;차원 축소 &amp;amp; 적합성 검정&lt;/h2&gt;
&lt;p&gt;변수 구조를 단순화하기 위해 &lt;strong&gt;주성분 분석(PCA)&lt;/strong&gt; 과 &lt;strong&gt;요인 분석&lt;/strong&gt;을 수행했습니다. 누적 분산 설명력이 약 99%에 도달하는 지점을 참고해 차원을 결정했습니다.&lt;/p&gt;
&lt;figure style="margin:1.5rem 0;"&gt;
&lt;img src="https://siuunni.github.io/uploads/papers/daegu_pca_scree.png"
alt="PCA scree plot과 누적 분산 설명력"
style="width:100%;border-radius:8px;border:1px solid rgba(148,163,184,.25);background:#fff;padding:.5rem;"&gt;
&lt;figcaption style="font-size:.8rem;color:#94a3b8;margin-top:.5rem;text-align:center;"&gt;
PCA scree plot(좌)과 누적 분산 설명력(우)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;요인 분석 적합성은 &lt;strong&gt;Bartlett 검정&lt;/strong&gt;(p-value ≈ 0.0)과 &lt;strong&gt;KMO 검정&lt;/strong&gt;(≈ 0.66)으로 확인해, 요인 분석이 적합하다는 결론을 얻었습니다. 요인 적재량을 기준으로 특허 관련, 데이터 산업, 기기·차량 산업, 연구소, 의료 산업 등 &lt;strong&gt;5개의 해석 가능한 feature&lt;/strong&gt;를 도출했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="회귀-모델"&gt;회귀 모델&lt;/h2&gt;
&lt;p&gt;도출한 5개 feature를 독립변수로, &lt;em&gt;매출액 대비 연구개발비 투자금액&lt;/em&gt;을 종속변수로 하여 여러 회귀 방법을 비교했습니다. &lt;strong&gt;Random Forest 회귀&lt;/strong&gt;가 가장 우수했습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center"&gt;n_estimators&lt;/th&gt;
&lt;th style="text-align: center"&gt;max_features&lt;/th&gt;
&lt;th style="text-align: center"&gt;max_depth&lt;/th&gt;
&lt;th style="text-align: center"&gt;RMSE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;10&lt;/td&gt;
&lt;td style="text-align: center"&gt;2&lt;/td&gt;
&lt;td style="text-align: center"&gt;10&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.0292&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;0.0269&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;1000&lt;/td&gt;
&lt;td style="text-align: center"&gt;2&lt;/td&gt;
&lt;td style="text-align: center"&gt;50&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.0306&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;최적 모델은 검증 데이터에서 &lt;strong&gt;RMSE 약 0.0269&lt;/strong&gt; 로 가장 낮은 오차를 보였습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="기대-효과"&gt;기대 효과&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;객관적 성장성 평가:&lt;/strong&gt; 재무 상태가 약하지만 성장 잠재력이 높은 기업을 정량 지표로 발굴해, 은행이 투명·안전하게 자금을 공급할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;지역 경제 활성화:&lt;/strong&gt; R&amp;amp;D 프로젝트의 잠재 가치를 반영한 기업 맞춤형 대출로 산업 발전과 혁신을 촉진합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;윈-윈 구조:&lt;/strong&gt; 기업은 자금을 확보해 성장하고, 은행은 신규 고객 확보·신용평가 개선·장기 투자 수익을 얻습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>가짜연구소 인과추론 팀 10기 — 실무 인과추론 기법 학습·적용</title><link>https://siuunni.github.io/projects/causal-10/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/causal-10/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;『실무로 배우는 인과추론 with Python』을 함께 공부하며, 인과추론 핵심 기법을 Synthetic 데이터와 실무형 예제로 직접 구현·비교한 스터디 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;활동&lt;/div&gt;
&lt;div&gt;가짜연구소 10기 인과추론 팀 (오픈소스 협업 스터디)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기간&lt;/div&gt;
&lt;div&gt;2025.03~2025.08&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;담당 역할&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;대안적 실험설계 파트 발표 · 분석 코드 제작 및 업로드&lt;/strong&gt; (기여도 15%)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · pandas · NumPy · scikit-learn · CausalML · Git/GitHub&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;성과&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;가짜연구소 10기 Project of the Season 수상&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="무엇을-왜-했나"&gt;무엇을, 왜 했나&lt;/h2&gt;
&lt;p&gt;상관관계만으로는 &amp;ldquo;이 처치가 정말 결과를 바꿨는가&amp;quot;를 답할 수 없습니다. 인과추론은 바로 그 질문에 답하기 위한 방법론으로, 마케팅·의료·정책 등 실무에서 의사결정의 근거가 됩니다. 다만 이론서만으로는 실제 데이터에 적용했을 때의 감을 잡기 어렵기 때문에, &lt;strong&gt;이론을 공부하는 데 그치지 않고 직접 데이터에 적용해 실용성을 확인&lt;/strong&gt;하는 것을 목표로 삼았습니다.&lt;/p&gt;
&lt;p&gt;저는 책의 &lt;strong&gt;대안적 실험설계&lt;/strong&gt; 파트를 맡아 발표했고, 주요 기법들의 분석 코드를 직접 작성해 공유했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="다룬-기법"&gt;다룬 기법&lt;/h2&gt;
&lt;p&gt;처치효과를 추정하는 서로 다른 접근들을 하나씩 구현하며, 어떤 상황에 어떤 방법이 맞는지를 비교했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Synthetic 데이터 실습:&lt;/strong&gt; 정답(true effect)을 아는 가상 데이터를 만들어, 각 기법이 실제 인과효과를 얼마나 잘 복원하는지 검증했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uplift Tree:&lt;/strong&gt; 처치에 대한 &lt;strong&gt;고객 반응 차이&lt;/strong&gt;를 세분화해, 처치가 효과적인 집단과 그렇지 않은 집단을 구분했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CEVAE:&lt;/strong&gt; 관측되지 않은 &lt;strong&gt;잠재 교란 변수&lt;/strong&gt;를 보정하는 인과 추론 모델을 실습했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도구변수(IV)·2SLS:&lt;/strong&gt; 내생성 문제가 있을 때 도구변수와 2단계 최소제곱법으로 인과효과를 추정했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meta-learner 비교:&lt;/strong&gt; S·T·X-learner 등 메타러너 계열의 처치효과 추정 성능을 비교했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DragonNet vs Meta-learner:&lt;/strong&gt; 신경망 기반 DragonNet과 메타러너의 추정 성능을 정량적으로 비교 분석했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;이론 → 적용:&lt;/strong&gt; 책으로 배운 인과추론 기법을 Synthetic·실무형 데이터에 직접 적용해 실용성을 확인했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;다양한 기법 비교:&lt;/strong&gt; Uplift Tree·CEVAE·IV/2SLS·Meta-learner·DragonNet을 한 흐름 안에서 비교해, 상황별 적합한 방법을 정리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;오픈소스 기여:&lt;/strong&gt; 대안적 실험설계 파트 발표와 분석 코드 업로드로 팀 결과물에 기여했고, &lt;strong&gt;10기 Project of the Season&lt;/strong&gt;을 수상했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>가짜연구소 인과추론 팀 11기 — Python DiD 코드집 배포</title><link>https://siuunni.github.io/projects/causal-11/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/projects/causal-11/</guid><description>&lt;div style="display:grid;grid-template-columns:130px 1fr;gap:1rem 1.5rem;margin-bottom:2rem;"&gt;
&lt;div style="font-weight:700;"&gt;개요&lt;/div&gt;
&lt;div&gt;흩어져 있던 다양한 DiD(이중차분) 방법론을 Python 코드로 통합·정리해, 누구나 바로 따라 쓸 수 있는 인과추론 코드집으로 만들어 배포한 프로젝트입니다.&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;활동&lt;/div&gt;
&lt;div&gt;가짜연구소 11기 인과추론 팀 (오픈소스 코드집 제작·배포)&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;활동&lt;/div&gt;
&lt;div&gt;2025.09~2025.12&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;담당 역할&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;DiD 파트 코드 제작 (기여도 85%) · 팀원 코드 리뷰 (15%)&lt;/strong&gt;&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기술 스택&lt;/div&gt;
&lt;div&gt;Python · pandas · NumPy · statsmodels · linearmodels · DoubleML · LightGBM · Git/GitHub&lt;/div&gt;
&lt;div style="font-weight:700;"&gt;기대 효과&lt;/div&gt;
&lt;div&gt;R 중심이던 인과추론 학습을 &lt;strong&gt;Python으로 확장&lt;/strong&gt;하고, 여러 DiD 방법을 한곳에 통합해 재현성·학습 효율 향상&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="무엇을-왜-했나"&gt;무엇을, 왜 했나&lt;/h2&gt;
&lt;p&gt;DiD(Difference-in-Differences)는 정책·처치의 효과를 추정하는 대표적인 인과추론 방법이지만, 막상 공부하려 하면 &lt;strong&gt;자료가 대부분 R 중심&lt;/strong&gt;이라 Python 사용자에게는 진입 장벽이 높았습니다. 게다가 Basic DiD부터 최신 Staggered DiD·머신러닝 DiD까지 방법론이 흩어져 있어, 한눈에 비교하며 배우기 어려웠습니다.&lt;/p&gt;
&lt;p&gt;그래서 &lt;strong&gt;다양한 DiD 방법론을 Python으로 일관되게 구현하고, 한 저장소에 통합해 배포&lt;/strong&gt;하기로 했습니다. 저는 그중 &lt;strong&gt;DiD 파트 코드 제작을 주도&lt;/strong&gt;했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="작업-내용"&gt;작업 내용&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;데이터 준비:&lt;/strong&gt; 지역 단위 패널데이터를 전처리하고, 처치 전후 구간을 구분해 모든 방법론이 공통으로 쓸 수 있는 형태로 정리했습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DiD 방법론 구현·비교:&lt;/strong&gt; 아래 방법들을 같은 데이터 위에서 구현해 결과를 비교했습니다.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basic DiD&lt;/strong&gt; — 가장 기본적인 2×2 이중차분&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;회귀 기반 DiD&lt;/strong&gt; — 회귀식으로 표현한 DiD&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TWFE&lt;/strong&gt; — 양방향 고정효과 모형&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DRDiD&lt;/strong&gt; — 이중 강건(Doubly Robust) DiD&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staggered DiD&lt;/strong&gt; — 처치 시점이 집단마다 다른 경우를 보정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event Study&lt;/strong&gt; — 처치 전후 시점별 동적 효과 추정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DoubleML&lt;/strong&gt; — 머신러닝으로 교란을 통제하는 이중 머신러닝&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LightGBM 기반 ML DiD&lt;/strong&gt; — 부스팅 모델을 결합한 DiD&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;코드 리뷰·배포:&lt;/strong&gt; DiD 파트 코드를 제작하고 팀원 코드를 리뷰한 뒤, Python 인과추론 코드집으로 정리해 GitHub에 공개 배포했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="핵심-요약"&gt;핵심 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python으로의 확장:&lt;/strong&gt; R 위주이던 인과추론 학습 자료를 Python으로 옮겨, Python 사용자의 진입 장벽을 낮췄습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;방법론 통합:&lt;/strong&gt; Basic·TWFE·Staggered·DoubleML·ML DiD까지 8가지 방법을 한 저장소에 모아, 재현성과 학습 효율을 높였습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주도적 기여:&lt;/strong&gt; DiD 파트 코드 제작(85%)을 주도하고 팀원 코드를 리뷰해, 배포 가능한 오픈소스 코드집으로 완성했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Activities</title><link>https://siuunni.github.io/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://siuunni.github.io/experience/</guid><description/></item></channel></rss>