<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lshxkwh 님의 블로그</title>
    <link>https://lshxkwh.tistory.com/</link>
    <description>lshxkwh 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 27 Jun 2026 17:40:35 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>lshxkwh</managingEditor>
    <image>
      <title>lshxkwh 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/8581374/attach/f4ea7a4a0b604f02ab923021da22c86c</url>
      <link>https://lshxkwh.tistory.com</link>
    </image>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 70일차 )</title>
      <link>https://lshxkwh.tistory.com/62</link>
      <description>&lt;h1&gt;EDA 분석 통합 보고서&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/38a69e106c01808d94bff31de157b351?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://app.notion.com/p/38a69e106c01808d94bff31de157b351?source=copy_link&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1782386432194&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;데이터를 통한 공정 과정 파악 | Notion&quot; data-og-description=&quot;데이터 기준 공정 과정 분석&quot; data-og-host=&quot;app.notion.com&quot; data-og-source-url=&quot;https://app.notion.com/p/38a69e106c01808d94bff31de157b351?source=copy_link&quot; data-og-url=&quot;https://app.notion.com/p/38a69e106c01808d94bff31de157b351&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ERssz/dJMb9hDbdNK/GAZK3OOLg9yrJeQYv167gk/img.png?width=1568&amp;amp;height=385&amp;amp;face=0_0_1568_385,https://scrap.kakaocdn.net/dn/sMevs/dJMb9lMlwne/MqOyqondvfK7P5EV8zhGK0/img.png?width=1568&amp;amp;height=385&amp;amp;face=0_0_1568_385&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/38a69e106c01808d94bff31de157b351?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.notion.com/p/38a69e106c01808d94bff31de157b351?source=copy_link&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ERssz/dJMb9hDbdNK/GAZK3OOLg9yrJeQYv167gk/img.png?width=1568&amp;amp;height=385&amp;amp;face=0_0_1568_385,https://scrap.kakaocdn.net/dn/sMevs/dJMb9lMlwne/MqOyqondvfK7P5EV8zhGK0/img.png?width=1568&amp;amp;height=385&amp;amp;face=0_0_1568_385');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 통한 공정 과정 파악 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터 기준 공정 과정 분석&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;app.notion.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a?source=copy_link&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1782386446555&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;이상 사이클 분석 | Notion&quot; data-og-description=&quot;이상 사이클 분석&quot; data-og-host=&quot;app.notion.com&quot; data-og-source-url=&quot;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a?source=copy_link&quot; data-og-url=&quot;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hSZBJ/dJMb8T99Tqn/k3wksVLuFBASDq6HMc3sv0/img.png?width=1389&amp;amp;height=790&amp;amp;face=0_0_1389_790,https://scrap.kakaocdn.net/dn/yOavE/dJMb8WeJXKi/BSxtWTSgncni1SXchjhns0/img.png?width=1389&amp;amp;height=790&amp;amp;face=0_0_1389_790&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.notion.com/p/38a69e106c018080bdd4ee3bda089d5a?source=copy_link&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hSZBJ/dJMb8T99Tqn/k3wksVLuFBASDq6HMc3sv0/img.png?width=1389&amp;amp;height=790&amp;amp;face=0_0_1389_790,https://scrap.kakaocdn.net/dn/yOavE/dJMb8WeJXKi/BSxtWTSgncni1SXchjhns0/img.png?width=1389&amp;amp;height=790&amp;amp;face=0_0_1389_790');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;이상 사이클 분석 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이상 사이클 분석&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;app.notion.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157?source=copy_link&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1782386468008&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;정상 vs 이상 비교 분석 | Notion&quot; data-og-description=&quot;정상 vs 이상 비교 분석 &amp;mdash; R03 Gripper_Load&quot; data-og-host=&quot;app.notion.com&quot; data-og-source-url=&quot;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157?source=copy_link&quot; data-og-url=&quot;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHrivG/dJMb9llg9XO/QgpKpDoORBzOjtQtjgb1d1/img.png?width=1025&amp;amp;height=1176&amp;amp;face=0_0_1025_1176,https://scrap.kakaocdn.net/dn/XgG4n/dJMb9kUcZmF/O58SHfr0y6VS5aMaZElAsk/img.png?width=1025&amp;amp;height=1176&amp;amp;face=0_0_1025_1176&quot;&gt;&lt;a href=&quot;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.notion.com/p/vs-38a69e106c018087937ae1fe4138c157?source=copy_link&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHrivG/dJMb9llg9XO/QgpKpDoORBzOjtQtjgb1d1/img.png?width=1025&amp;amp;height=1176&amp;amp;face=0_0_1025_1176,https://scrap.kakaocdn.net/dn/XgG4n/dJMb9kUcZmF/O58SHfr0y6VS5aMaZElAsk/img.png?width=1025&amp;amp;height=1176&amp;amp;face=0_0_1025_1176');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;정상 vs 이상 비교 분석 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정상 vs 이상 비교 분석 &amp;mdash; R03 Gripper_Load&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;app.notion.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상 사이클 115번을 기준으로 로봇 자동화 조립라인의 공정 과정을 데이터로 유추하고, 이상 사이클 3종과 비교하여 핵심 신호를 도출한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 데이터 기반 공정 과정 분석&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 흐름&lt;/h3&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 공급 &amp;rarr; 컨베이어 이송 &amp;rarr; 로봇 조립 &amp;rarr; 비전 검사 &amp;rarr; 완제품 출하
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1 사이클 구조&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 사이클 = 로켓 1개 조립 = 약 295초&lt;/li&gt;
&lt;li&gt;총 276 사이클 (정상 138 / 이상 138)&lt;/li&gt;
&lt;li&gt;Q_Cell_CycleCount 기준으로 사이클 분할&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로봇별 작업 구간 (정상 사이클 115번 기준)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로봇 작업 구간 작업 시간 역할 추정&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;1 ~ 31초&lt;/td&gt;
&lt;td&gt;30초&lt;/td&gt;
&lt;td&gt;부품 위치 확인 또는 가벼운 접촉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;38 ~ 97초&lt;/td&gt;
&lt;td&gt;59초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;63 ~ 127초&lt;/td&gt;
&lt;td&gt;64초&lt;/td&gt;
&lt;td&gt;실제 부품 파지 및 조립 (핵심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;204 ~ 308초&lt;/td&gt;
&lt;td&gt;104초&lt;/td&gt;
&lt;td&gt;최종 마무리 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R02와 R03이 63~97초 구간에서 동시에 작업한다. R03 작업 완료(127초) 이후 약 77초 공백이 있고 R04가 204초에 시작한다. 컨베이어 이송 시간으로 추정.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로봇 조립 동작 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단계 설명 센서 변화&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick&lt;/td&gt;
&lt;td&gt;그리퍼가 닫히면서 부품을 집음&lt;/td&gt;
&lt;td&gt;Gripper_Load 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;관절 6축이 움직이며 목표 위치로 이동&lt;/td&gt;
&lt;td&gt;관절각도 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place&lt;/td&gt;
&lt;td&gt;부품을 내려놓거나 끼워 맞춤&lt;/td&gt;
&lt;td&gt;Gripper_Load 하강&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;센서 해석 정리&lt;/h3&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;Gripper_Pot 낮음 + Gripper_Load 높음 &amp;rarr; 파지 성공 (부품 있음)
Gripper_Pot 낮음 + Gripper_Load 낮음 &amp;rarr; 파지 시도했지만 부품 없음 (이상)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로봇별 상세 분석 (정상 사이클 115번)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R01&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 0~30초 활성, 이후 대기&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 25초에 1번 하강 후 복귀&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~300 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R02&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 38~97초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 4번 하강 (40~45초, 50~55초, 60~80초, 85~95초)&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~1,200 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R03&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 63~127초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 6번 하강&lt;/li&gt;
&lt;li&gt;Gripper_Load: 4번 튐 (8,000~9,000 수준, 강한 파지)&lt;/li&gt;
&lt;li&gt;핵심 로봇&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R04&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 204~308초 활성 (R01~R03 완료 후 시작)&lt;/li&gt;
&lt;li&gt;Gripper_Load: -2,000~2,000 노이즈 (정밀 작업으로 추정)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터로 확인이 안 되는 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 확인 여부&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;로봇 작업 시간대&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컨베이어 이송 순서&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 성공/실패 시점&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03이 NoseCone을 다루는지&lt;/td&gt;
&lt;td&gt;✅ 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01, R02가 어떤 부품을 다루는지&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127초~204초 공백 구간&lt;/td&gt;
&lt;td&gt;❓ 컨베이어 이송 시간으로 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이미지 촬영 시점&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 이상 사이클 분석&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대표 사이클 정보&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 유형 대표 사이클&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal (기준)&lt;/td&gt;
&lt;td&gt;115번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;264번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;38번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;88번&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1. NoNose (사이클 264번)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R01&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose 264번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 하강 시점&lt;/td&gt;
&lt;td&gt;25초&lt;/td&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;더 빨리 닫힘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R01 단계에서는 이상 구별 불가&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R02&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose 264번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R02 단계에서도 이상 구별 어려움. 시작 시점만 다름.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R03&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose 264번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R03에서 처음으로 정상/이상 차이 확인.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R04&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose 264번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-2. NoNose+NoBody2 (사이클 38번)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R01&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2 38번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R01 단계에서는 이상 구별 불가&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R02&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2 38번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부품이 없어서 저항 없이 그리퍼가 끝까지 닫히는 것으로 추정.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R03&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2 38번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R04&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2 38번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;노이즈 거의 없음&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Body2까지 누락되면 R04 Gripper_Load 노이즈가 거의 사라짐.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-3. NoNose+NoBody2+NoBody1 (사이클 88번)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R01&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R02&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~80초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R03&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~110초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부품 누락이 늘어날수록 R03 Gripper_Load 튀는 횟수가 정확히 1번씩 줄어드는 패턴 확인.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R04&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 정상 vs 이상 비교 &amp;mdash; R03 Gripper_Load&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 유형 튀는 구간 횟수 누락 부품 수&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;65~125초&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;0개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;100~110초&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 누락이 늘어날수록
&amp;rarr; Gripper_Load가 튀는 횟수가 줄어들고
&amp;rarr; 튀는 시점도 점점 뒤로 밀림
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누락 부품 수 = 4 - Gripper_Load 튀는 횟수&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 전체 요약&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로봇별 이상 탐지 가능 여부&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로봇 NoNose NoNose+NoBody2 NoNose+NoBody2+NoBody1 핵심 신호&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Load 노이즈 감소&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;R03 Gripper_Load가 핵심 신호인 이유&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;이상 여부 판단&lt;/b&gt; &amp;mdash; 65~125초 구간에서 4번 모두 튀면 정상, 그렇지 않으면 이상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상 유형 판단&lt;/b&gt; &amp;mdash; 튀는 횟수로 누락 부품 수 추정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SHAP 분석 결과와 일치&lt;/b&gt; &amp;mdash; Random Forest 모델에서도 R03 Gripper_Load_mean이 1위
&lt;h1&gt;EDA 분석 통합 보고서&lt;/h1&gt;
정상 사이클 115번을 기준으로 로봇 자동화 조립라인의 공정 과정을 데이터로 유추하고, 이상 사이클 3종과 비교하여 핵심 신호를 도출한다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;1. 데이터 기반 공정 과정 분석
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 공급 &amp;rarr; 컨베이어 이송 &amp;rarr; 로봇 조립 &amp;rarr; 비전 검사 &amp;rarr; 완제품 출하
&lt;/code&gt;&lt;/pre&gt;
1 사이클 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 사이클 = 로켓 1개 조립 = 약 295초&lt;/li&gt;
&lt;li&gt;총 276 사이클 (정상 138 / 이상 138)&lt;/li&gt;
&lt;li&gt;Q_Cell_CycleCount 기준으로 사이클 분할&lt;/li&gt;
&lt;/ul&gt;
로봇별 작업 구간 (정상 사이클 115번 기준)로봇 작업 구간 작업 시간 역할 추정
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;1 ~ 31초&lt;/td&gt;
&lt;td&gt;30초&lt;/td&gt;
&lt;td&gt;부품 위치 확인 또는 가벼운 접촉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;38 ~ 97초&lt;/td&gt;
&lt;td&gt;59초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;63 ~ 127초&lt;/td&gt;
&lt;td&gt;64초&lt;/td&gt;
&lt;td&gt;실제 부품 파지 및 조립 (핵심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;204 ~ 308초&lt;/td&gt;
&lt;td&gt;104초&lt;/td&gt;
&lt;td&gt;최종 마무리 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02와 R03이 63~97초 구간에서 동시에 작업한다. R03 작업 완료(127초) 이후 약 77초 공백이 있고 R04가 204초에 시작한다. 컨베이어 이송 시간으로 추정.단계 설명 센서 변화
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick&lt;/td&gt;
&lt;td&gt;그리퍼가 닫히면서 부품을 집음&lt;/td&gt;
&lt;td&gt;Gripper_Load 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;관절 6축이 움직이며 목표 위치로 이동&lt;/td&gt;
&lt;td&gt;관절각도 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place&lt;/td&gt;
&lt;td&gt;부품을 내려놓거나 끼워 맞춤&lt;/td&gt;
&lt;td&gt;Gripper_Load 하강&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
센서 해석 정리로봇별 상세 분석 (정상 사이클 115번)&lt;img id=&quot;img_1782385373430_1&quot; src=&quot;https://claude.ai/chat/1782300033983_image.png&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 0~30초 활성, 이후 대기&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 25초에 1번 하강 후 복귀&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~300 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R02&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 38~97초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 4번 하강 (40~45초, 50~55초, 60~80초, 85~95초)&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~1,200 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R03&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 63~127초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 6번 하강&lt;/li&gt;
&lt;li&gt;Gripper_Load: 4번 튐 (8,000~9,000 수준, 강한 파지)&lt;/li&gt;
&lt;li&gt;핵심 로봇&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R04&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 204~308초 활성 (R01~R03 완료 후 시작)&lt;/li&gt;
&lt;li&gt;Gripper_Load: -2,000~2,000 노이즈 (정밀 작업으로 추정)&lt;/li&gt;
&lt;/ul&gt;
데이터로 확인이 안 되는 것항목 확인 여부
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;로봇 작업 시간대&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컨베이어 이송 순서&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 성공/실패 시점&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03이 NoseCone을 다루는지&lt;/td&gt;
&lt;td&gt;✅ 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01, R02가 어떤 부품을 다루는지&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127초~204초 공백 구간&lt;/td&gt;
&lt;td&gt;❓ 컨베이어 이송 시간으로 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이미지 촬영 시점&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2. 이상 사이클 분석이상 유형 대표 사이클
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal (기준)&lt;/td&gt;
&lt;td&gt;115번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;264번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;38번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;88번&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-1. NoNose (사이클 264번)&lt;img id=&quot;img_1782385373431_5&quot; src=&quot;https://claude.ai/chat/1782373197139_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 하강 시점&lt;/td&gt;
&lt;td&gt;25초&lt;/td&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;더 빨리 닫힘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373431_6&quot; src=&quot;https://claude.ai/chat/1782374694129_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02 단계에서도 이상 구별 어려움. 시작 시점만 다름.&lt;img id=&quot;img_1782385373432_7&quot; src=&quot;https://claude.ai/chat/1782375143642_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03에서 처음으로 정상/이상 차이 확인.&lt;img id=&quot;img_1782385373432_8&quot; src=&quot;https://claude.ai/chat/1782375443493_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-2. NoNose+NoBody2 (사이클 38번)&lt;img id=&quot;img_1782385373432_9&quot; src=&quot;https://claude.ai/chat/1782376209740_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373432_10&quot; src=&quot;https://claude.ai/chat/1782376933481_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품이 없어서 저항 없이 그리퍼가 끝까지 닫히는 것으로 추정.&lt;img id=&quot;img_1782385373433_11&quot; src=&quot;https://claude.ai/chat/1782377539698_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R04&lt;/b&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;노이즈 거의 없음&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Body2까지 누락되면 R04 Gripper_Load 노이즈가 거의 사라짐.&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-3. NoNose+NoBody2+NoBody1 (사이클 88번)&lt;img id=&quot;img_1782385373433_13&quot; src=&quot;https://claude.ai/chat/1782381785778_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R02&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~80초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R03&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~110초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품 누락이 늘어날수록 R03 Gripper_Load 튀는 횟수가 정확히 1번씩 줄어드는 패턴 확인.&lt;img id=&quot;img_1782385373434_16&quot; src=&quot;https://claude.ai/chat/1782382987511_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;3. 정상 vs 이상 비교 &amp;mdash; R03 Gripper_Load이상 유형 튀는 구간 횟수 누락 부품 수
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;65~125초&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;0개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;100~110초&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 누락이 늘어날수록
&amp;rarr; Gripper_Load가 튀는 횟수가 줄어들고
&amp;rarr; 튀는 시점도 점점 뒤로 밀림
&lt;/code&gt;&lt;/pre&gt;
누락 부품 수 = 4 - Gripper_Load 튀는 횟수&lt;hr data-ke-style=&quot;style1&quot; /&gt;4. 전체 요약로봇 NoNose NoNose+NoBody2 NoNose+NoBody2+NoBody1 핵심 신호
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Load 노이즈 감소&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03 Gripper_Load가 핵심 신호인 이유
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;이상 여부 판단&lt;/b&gt; &amp;mdash; 65~125초 구간에서 4번 모두 튀면 정상, 그렇지 않으면 이상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상 유형 판단&lt;/b&gt; &amp;mdash; 튀는 횟수로 누락 부품 수 추정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SHAP 분석 결과와 일치&lt;/b&gt; &amp;mdash; Random Forest 모델에서도 R03 Gripper_Load_mean이 1위
&lt;h1&gt;EDA 분석 통합 보고서&lt;/h1&gt;
정상 사이클 115번을 기준으로 로봇 자동화 조립라인의 공정 과정을 데이터로 유추하고, 이상 사이클 3종과 비교하여 핵심 신호를 도출한다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;1. 데이터 기반 공정 과정 분석
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 공급 &amp;rarr; 컨베이어 이송 &amp;rarr; 로봇 조립 &amp;rarr; 비전 검사 &amp;rarr; 완제품 출하
&lt;/code&gt;&lt;/pre&gt;
1 사이클 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 사이클 = 로켓 1개 조립 = 약 295초&lt;/li&gt;
&lt;li&gt;총 276 사이클 (정상 138 / 이상 138)&lt;/li&gt;
&lt;li&gt;Q_Cell_CycleCount 기준으로 사이클 분할&lt;/li&gt;
&lt;/ul&gt;
로봇별 작업 구간 (정상 사이클 115번 기준)로봇 작업 구간 작업 시간 역할 추정
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;1 ~ 31초&lt;/td&gt;
&lt;td&gt;30초&lt;/td&gt;
&lt;td&gt;부품 위치 확인 또는 가벼운 접촉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;38 ~ 97초&lt;/td&gt;
&lt;td&gt;59초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;63 ~ 127초&lt;/td&gt;
&lt;td&gt;64초&lt;/td&gt;
&lt;td&gt;실제 부품 파지 및 조립 (핵심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;204 ~ 308초&lt;/td&gt;
&lt;td&gt;104초&lt;/td&gt;
&lt;td&gt;최종 마무리 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02와 R03이 63~97초 구간에서 동시에 작업한다. R03 작업 완료(127초) 이후 약 77초 공백이 있고 R04가 204초에 시작한다. 컨베이어 이송 시간으로 추정.단계 설명 센서 변화
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick&lt;/td&gt;
&lt;td&gt;그리퍼가 닫히면서 부품을 집음&lt;/td&gt;
&lt;td&gt;Gripper_Load 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;관절 6축이 움직이며 목표 위치로 이동&lt;/td&gt;
&lt;td&gt;관절각도 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place&lt;/td&gt;
&lt;td&gt;부품을 내려놓거나 끼워 맞춤&lt;/td&gt;
&lt;td&gt;Gripper_Load 하강&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
센서 해석 정리로봇별 상세 분석 (정상 사이클 115번)&lt;img id=&quot;img_1782385373430_1&quot; src=&quot;https://claude.ai/chat/1782300033983_image.png&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 0~30초 활성, 이후 대기&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 25초에 1번 하강 후 복귀&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~300 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R02&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 38~97초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 4번 하강 (40~45초, 50~55초, 60~80초, 85~95초)&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~1,200 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R03&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 63~127초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 6번 하강&lt;/li&gt;
&lt;li&gt;Gripper_Load: 4번 튐 (8,000~9,000 수준, 강한 파지)&lt;/li&gt;
&lt;li&gt;핵심 로봇&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R04&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 204~308초 활성 (R01~R03 완료 후 시작)&lt;/li&gt;
&lt;li&gt;Gripper_Load: -2,000~2,000 노이즈 (정밀 작업으로 추정)&lt;/li&gt;
&lt;/ul&gt;
데이터로 확인이 안 되는 것항목 확인 여부
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;로봇 작업 시간대&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컨베이어 이송 순서&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 성공/실패 시점&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03이 NoseCone을 다루는지&lt;/td&gt;
&lt;td&gt;✅ 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01, R02가 어떤 부품을 다루는지&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127초~204초 공백 구간&lt;/td&gt;
&lt;td&gt;❓ 컨베이어 이송 시간으로 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이미지 촬영 시점&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2. 이상 사이클 분석이상 유형 대표 사이클
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal (기준)&lt;/td&gt;
&lt;td&gt;115번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;264번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;38번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;88번&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-1. NoNose (사이클 264번)&lt;img id=&quot;img_1782385373431_5&quot; src=&quot;https://claude.ai/chat/1782373197139_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 하강 시점&lt;/td&gt;
&lt;td&gt;25초&lt;/td&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;더 빨리 닫힘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373431_6&quot; src=&quot;https://claude.ai/chat/1782374694129_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02 단계에서도 이상 구별 어려움. 시작 시점만 다름.&lt;img id=&quot;img_1782385373432_7&quot; src=&quot;https://claude.ai/chat/1782375143642_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03에서 처음으로 정상/이상 차이 확인.&lt;img id=&quot;img_1782385373432_8&quot; src=&quot;https://claude.ai/chat/1782375443493_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-2. NoNose+NoBody2 (사이클 38번)&lt;img id=&quot;img_1782385373432_9&quot; src=&quot;https://claude.ai/chat/1782376209740_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373432_10&quot; src=&quot;https://claude.ai/chat/1782376933481_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품이 없어서 저항 없이 그리퍼가 끝까지 닫히는 것으로 추정.&lt;img id=&quot;img_1782385373433_11&quot; src=&quot;https://claude.ai/chat/1782377539698_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R04&lt;/b&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;노이즈 거의 없음&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Body2까지 누락되면 R04 Gripper_Load 노이즈가 거의 사라짐.&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-3. NoNose+NoBody2+NoBody1 (사이클 88번)&lt;img id=&quot;img_1782385373433_13&quot; src=&quot;https://claude.ai/chat/1782381785778_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R02&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~80초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R03&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~110초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품 누락이 늘어날수록 R03 Gripper_Load 튀는 횟수가 정확히 1번씩 줄어드는 패턴 확인.&lt;img id=&quot;img_1782385373434_16&quot; src=&quot;https://claude.ai/chat/1782382987511_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;3. 정상 vs 이상 비교 &amp;mdash; R03 Gripper_Load이상 유형 튀는 구간 횟수 누락 부품 수
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;65~125초&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;0개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;100~110초&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 누락이 늘어날수록
&amp;rarr; Gripper_Load가 튀는 횟수가 줄어들고
&amp;rarr; 튀는 시점도 점점 뒤로 밀림
&lt;/code&gt;&lt;/pre&gt;
누락 부품 수 = 4 - Gripper_Load 튀는 횟수&lt;hr data-ke-style=&quot;style1&quot; /&gt;4. 전체 요약로봇 NoNose NoNose+NoBody2 NoNose+NoBody2+NoBody1 핵심 신호
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Load 노이즈 감소&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03 Gripper_Load가 핵심 신호인 이유
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;이상 여부 판단&lt;/b&gt; &amp;mdash; 65~125초 구간에서 4번 모두 튀면 정상, 그렇지 않으면 이상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상 유형 판단&lt;/b&gt; &amp;mdash; 튀는 횟수로 누락 부품 수 추정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SHAP 분석 결과와 일치&lt;/b&gt; &amp;mdash; Random Forest 모델에서도 R03 Gripper_Load_mean이 1위
&lt;h1&gt;EDA 분석 통합 보고서&lt;/h1&gt;
정상 사이클 115번을 기준으로 로봇 자동화 조립라인의 공정 과정을 데이터로 유추하고, 이상 사이클 3종과 비교하여 핵심 신호를 도출한다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;1. 데이터 기반 공정 과정 분석
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 공급 &amp;rarr; 컨베이어 이송 &amp;rarr; 로봇 조립 &amp;rarr; 비전 검사 &amp;rarr; 완제품 출하
&lt;/code&gt;&lt;/pre&gt;
1 사이클 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 사이클 = 로켓 1개 조립 = 약 295초&lt;/li&gt;
&lt;li&gt;총 276 사이클 (정상 138 / 이상 138)&lt;/li&gt;
&lt;li&gt;Q_Cell_CycleCount 기준으로 사이클 분할&lt;/li&gt;
&lt;/ul&gt;
로봇별 작업 구간 (정상 사이클 115번 기준)로봇 작업 구간 작업 시간 역할 추정
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;1 ~ 31초&lt;/td&gt;
&lt;td&gt;30초&lt;/td&gt;
&lt;td&gt;부품 위치 확인 또는 가벼운 접촉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;38 ~ 97초&lt;/td&gt;
&lt;td&gt;59초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;63 ~ 127초&lt;/td&gt;
&lt;td&gt;64초&lt;/td&gt;
&lt;td&gt;실제 부품 파지 및 조립 (핵심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;204 ~ 308초&lt;/td&gt;
&lt;td&gt;104초&lt;/td&gt;
&lt;td&gt;최종 마무리 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02와 R03이 63~97초 구간에서 동시에 작업한다. R03 작업 완료(127초) 이후 약 77초 공백이 있고 R04가 204초에 시작한다. 컨베이어 이송 시간으로 추정.단계 설명 센서 변화
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick&lt;/td&gt;
&lt;td&gt;그리퍼가 닫히면서 부품을 집음&lt;/td&gt;
&lt;td&gt;Gripper_Load 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;관절 6축이 움직이며 목표 위치로 이동&lt;/td&gt;
&lt;td&gt;관절각도 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place&lt;/td&gt;
&lt;td&gt;부품을 내려놓거나 끼워 맞춤&lt;/td&gt;
&lt;td&gt;Gripper_Load 하강&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
센서 해석 정리로봇별 상세 분석 (정상 사이클 115번)&lt;img id=&quot;img_1782385373430_1&quot; src=&quot;https://claude.ai/chat/1782300033983_image.png&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 0~30초 활성, 이후 대기&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 25초에 1번 하강 후 복귀&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~300 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R02&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 38~97초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 4번 하강 (40~45초, 50~55초, 60~80초, 85~95초)&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~1,200 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R03&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 63~127초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 6번 하강&lt;/li&gt;
&lt;li&gt;Gripper_Load: 4번 튐 (8,000~9,000 수준, 강한 파지)&lt;/li&gt;
&lt;li&gt;핵심 로봇&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R04&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 204~308초 활성 (R01~R03 완료 후 시작)&lt;/li&gt;
&lt;li&gt;Gripper_Load: -2,000~2,000 노이즈 (정밀 작업으로 추정)&lt;/li&gt;
&lt;/ul&gt;
데이터로 확인이 안 되는 것항목 확인 여부
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;로봇 작업 시간대&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컨베이어 이송 순서&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 성공/실패 시점&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03이 NoseCone을 다루는지&lt;/td&gt;
&lt;td&gt;✅ 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01, R02가 어떤 부품을 다루는지&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127초~204초 공백 구간&lt;/td&gt;
&lt;td&gt;❓ 컨베이어 이송 시간으로 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이미지 촬영 시점&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2. 이상 사이클 분석이상 유형 대표 사이클
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal (기준)&lt;/td&gt;
&lt;td&gt;115번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;264번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;38번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;88번&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-1. NoNose (사이클 264번)&lt;img id=&quot;img_1782385373431_5&quot; src=&quot;https://claude.ai/chat/1782373197139_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 하강 시점&lt;/td&gt;
&lt;td&gt;25초&lt;/td&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;더 빨리 닫힘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373431_6&quot; src=&quot;https://claude.ai/chat/1782374694129_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02 단계에서도 이상 구별 어려움. 시작 시점만 다름.&lt;img id=&quot;img_1782385373432_7&quot; src=&quot;https://claude.ai/chat/1782375143642_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03에서 처음으로 정상/이상 차이 확인.&lt;img id=&quot;img_1782385373432_8&quot; src=&quot;https://claude.ai/chat/1782375443493_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-2. NoNose+NoBody2 (사이클 38번)&lt;img id=&quot;img_1782385373432_9&quot; src=&quot;https://claude.ai/chat/1782376209740_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373432_10&quot; src=&quot;https://claude.ai/chat/1782376933481_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품이 없어서 저항 없이 그리퍼가 끝까지 닫히는 것으로 추정.&lt;img id=&quot;img_1782385373433_11&quot; src=&quot;https://claude.ai/chat/1782377539698_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R04&lt;/b&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;노이즈 거의 없음&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Body2까지 누락되면 R04 Gripper_Load 노이즈가 거의 사라짐.&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-3. NoNose+NoBody2+NoBody1 (사이클 88번)&lt;img id=&quot;img_1782385373433_13&quot; src=&quot;https://claude.ai/chat/1782381785778_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R02&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~80초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R03&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~110초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품 누락이 늘어날수록 R03 Gripper_Load 튀는 횟수가 정확히 1번씩 줄어드는 패턴 확인.&lt;img id=&quot;img_1782385373434_16&quot; src=&quot;https://claude.ai/chat/1782382987511_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;3. 정상 vs 이상 비교 &amp;mdash; R03 Gripper_Load이상 유형 튀는 구간 횟수 누락 부품 수
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;65~125초&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;0개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;65~110초&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;100~110초&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3개&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 누락이 늘어날수록
&amp;rarr; Gripper_Load가 튀는 횟수가 줄어들고
&amp;rarr; 튀는 시점도 점점 뒤로 밀림
&lt;/code&gt;&lt;/pre&gt;
누락 부품 수 = 4 - Gripper_Load 튀는 횟수&lt;hr data-ke-style=&quot;style1&quot; /&gt;4. 전체 요약로봇 NoNose NoNose+NoBody2 NoNose+NoBody2+NoBody1 핵심 신호
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot 최솟값 하락&lt;/td&gt;
&lt;td&gt;Gripper_Pot min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;가능&lt;/td&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;Gripper_Load 노이즈 감소&lt;/td&gt;
&lt;td&gt;불가&lt;/td&gt;
&lt;td&gt;불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03 Gripper_Load가 핵심 신호인 이유
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;이상 여부 판단&lt;/b&gt; &amp;mdash; 65~125초 구간에서 4번 모두 튀면 정상, 그렇지 않으면 이상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상 유형 판단&lt;/b&gt; &amp;mdash; 튀는 횟수로 누락 부품 수 추정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SHAP 분석 결과와 일치&lt;/b&gt; &amp;mdash; Random Forest 모델에서도 R03 Gripper_Load_mean이 1위
&lt;h1&gt;EDA 분석 통합 보고서&lt;/h1&gt;
정상 사이클 115번을 기준으로 로봇 자동화 조립라인의 공정 과정을 데이터로 유추하고, 이상 사이클 3종과 비교하여 핵심 신호를 도출한다.&lt;hr data-ke-style=&quot;style1&quot; /&gt;1. 데이터 기반 공정 과정 분석
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;부품 공급 &amp;rarr; 컨베이어 이송 &amp;rarr; 로봇 조립 &amp;rarr; 비전 검사 &amp;rarr; 완제품 출하
&lt;/code&gt;&lt;/pre&gt;
1 사이클 구조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 사이클 = 로켓 1개 조립 = 약 295초&lt;/li&gt;
&lt;li&gt;총 276 사이클 (정상 138 / 이상 138)&lt;/li&gt;
&lt;li&gt;Q_Cell_CycleCount 기준으로 사이클 분할&lt;/li&gt;
&lt;/ul&gt;
로봇별 작업 구간 (정상 사이클 115번 기준)로봇 작업 구간 작업 시간 역할 추정
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;1 ~ 31초&lt;/td&gt;
&lt;td&gt;30초&lt;/td&gt;
&lt;td&gt;부품 위치 확인 또는 가벼운 접촉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;38 ~ 97초&lt;/td&gt;
&lt;td&gt;59초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;63 ~ 127초&lt;/td&gt;
&lt;td&gt;64초&lt;/td&gt;
&lt;td&gt;실제 부품 파지 및 조립 (핵심)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;204 ~ 308초&lt;/td&gt;
&lt;td&gt;104초&lt;/td&gt;
&lt;td&gt;최종 마무리 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02와 R03이 63~97초 구간에서 동시에 작업한다. R03 작업 완료(127초) 이후 약 77초 공백이 있고 R04가 204초에 시작한다. 컨베이어 이송 시간으로 추정.단계 설명 센서 변화
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick&lt;/td&gt;
&lt;td&gt;그리퍼가 닫히면서 부품을 집음&lt;/td&gt;
&lt;td&gt;Gripper_Load 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;td&gt;관절 6축이 움직이며 목표 위치로 이동&lt;/td&gt;
&lt;td&gt;관절각도 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place&lt;/td&gt;
&lt;td&gt;부품을 내려놓거나 끼워 맞춤&lt;/td&gt;
&lt;td&gt;Gripper_Load 하강&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
센서 해석 정리로봇별 상세 분석 (정상 사이클 115번)&lt;img id=&quot;img_1782385373430_1&quot; src=&quot;https://claude.ai/chat/1782300033983_image.png&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 0~30초 활성, 이후 대기&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 25초에 1번 하강 후 복귀&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~300 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R02&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 38~97초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 4번 하강 (40~45초, 50~55초, 60~80초, 85~95초)&lt;/li&gt;
&lt;li&gt;Gripper_Load: ~1,200 (낮음)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R03&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 63~127초 활성&lt;/li&gt;
&lt;li&gt;Gripper_Pot: 6번 하강&lt;/li&gt;
&lt;li&gt;Gripper_Load: 4번 튐 (8,000~9,000 수준, 강한 파지)&lt;/li&gt;
&lt;li&gt;핵심 로봇&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;R04&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관절각도: 204~308초 활성 (R01~R03 완료 후 시작)&lt;/li&gt;
&lt;li&gt;Gripper_Load: -2,000~2,000 노이즈 (정밀 작업으로 추정)&lt;/li&gt;
&lt;/ul&gt;
데이터로 확인이 안 되는 것항목 확인 여부
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;로봇 작업 시간대&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컨베이어 이송 순서&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 성공/실패 시점&lt;/td&gt;
&lt;td&gt;✅ 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03이 NoseCone을 다루는지&lt;/td&gt;
&lt;td&gt;✅ 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01, R02가 어떤 부품을 다루는지&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127초~204초 공백 구간&lt;/td&gt;
&lt;td&gt;❓ 컨베이어 이송 시간으로 추정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이미지 촬영 시점&lt;/td&gt;
&lt;td&gt;❓ 불확실&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2. 이상 사이클 분석이상 유형 대표 사이클
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal (기준)&lt;/td&gt;
&lt;td&gt;115번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;264번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2&lt;/td&gt;
&lt;td&gt;38번&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose+NoBody2+NoBody1&lt;/td&gt;
&lt;td&gt;88번&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-1. NoNose (사이클 264번)&lt;img id=&quot;img_1782385373431_5&quot; src=&quot;https://claude.ai/chat/1782373197139_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 하강 시점&lt;/td&gt;
&lt;td&gt;25초&lt;/td&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;더 빨리 닫힘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373431_6&quot; src=&quot;https://claude.ai/chat/1782374694129_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R02 단계에서도 이상 구별 어려움. 시작 시점만 다름.&lt;img id=&quot;img_1782385373432_7&quot; src=&quot;https://claude.ai/chat/1782375143642_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;3회&lt;/td&gt;
&lt;td&gt;1번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R03에서 처음으로 정상/이상 차이 확인.&lt;img id=&quot;img_1782385373432_8&quot; src=&quot;https://claude.ai/chat/1782375443493_image.png&quot; /&gt;항목 정상 115번 NoNose 264번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-2. NoNose+NoBody2 (사이클 38번)&lt;img id=&quot;img_1782385373432_9&quot; src=&quot;https://claude.ai/chat/1782376209740_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
R01 단계에서는 이상 구별 불가&lt;img id=&quot;img_1782385373432_10&quot; src=&quot;https://claude.ai/chat/1782376933481_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~83초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
부품이 없어서 저항 없이 그리퍼가 끝까지 닫히는 것으로 추정.&lt;img id=&quot;img_1782385373433_11&quot; src=&quot;https://claude.ai/chat/1782377539698_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~113초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;2회&lt;/td&gt;
&lt;td&gt;2번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R04&lt;/b&gt;항목 정상 115번 NoNose+NoBody2 38번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;204~308초&lt;/td&gt;
&lt;td&gt;193~295초&lt;/td&gt;
&lt;td&gt;약 11초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;-2,000~2,000 노이즈&lt;/td&gt;
&lt;td&gt;노이즈 거의 없음&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Body2까지 누락되면 R04 Gripper_Load 노이즈가 거의 사라짐.&lt;hr data-ke-style=&quot;style1&quot; /&gt;2-3. NoNose+NoBody2+NoBody1 (사이클 88번)&lt;img id=&quot;img_1782385373433_13&quot; src=&quot;https://claude.ai/chat/1782381785778_image.png&quot; /&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;1~31초&lt;/td&gt;
&lt;td&gt;1~15초&lt;/td&gt;
&lt;td&gt;약 16초 짧음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;~300&lt;/td&gt;
&lt;td&gt;차이 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R02&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;38~97초&lt;/td&gt;
&lt;td&gt;25~80초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;파지 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최솟값&lt;/td&gt;
&lt;td&gt;~6,500&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;차이 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;R03&lt;/b&gt;항목 정상 115번 NoNose+NoBody2+NoBody1 88번 차이
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관절각도 활성 구간&lt;/td&gt;
&lt;td&gt;63~127초&lt;/td&gt;
&lt;td&gt;50~110초&lt;/td&gt;
&lt;td&gt;약 13초 일찍 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Load 튀는 횟수&lt;/td&gt;
&lt;td&gt;4회&lt;/td&gt;
&lt;td&gt;1회&lt;/td&gt;
&lt;td&gt;3번 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gripper_Pot 최&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/62</guid>
      <comments>https://lshxkwh.tistory.com/62#entry62comment</comments>
      <pubDate>Thu, 25 Jun 2026 20:21:21 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 69일차 )</title>
      <link>https://lshxkwh.tistory.com/61</link>
      <description>&lt;h1&gt;스마트제조 - 로봇 조립라인 시계열 센서 데이터 분석&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주제&lt;/b&gt;: 스마트제조 환경에서 로봇 조립라인의 시계열 센서 데이터를 활용한 이상(결함) 탐지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터 특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;약 50개 센서 컬럼, 10Hz 수집률로 30시간 가동분을 필터링하여 최종 32개 완전 사이클 구성&lt;/li&gt;
&lt;li&gt;모든 파일 공통: &lt;b&gt;974,836행&lt;/b&gt; 의 시계열 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터셋 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석에 사용된 데이터는 총 7개 파일로 구성되어 있으며, 각각 공정의 서로 다른 측면을 담고 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;① Conveyor_Signals.csv &amp;mdash; 컨베이어 신호&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 11컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q_VFD1~4_Temperature&lt;/td&gt;
&lt;td&gt;컨베이어 구동 인버터(VFD) 온도 센서 4개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I_Stopper1~5_Status&lt;/td&gt;
&lt;td&gt;스토퍼 작동 상태 (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_time&lt;/td&gt;
&lt;td&gt;타임스탬프&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;이벤트 설명 (약 49.5% 결측 &amp;mdash; 이벤트 발생 시에만 기록)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이상치 분석&lt;/b&gt;&lt;br /&gt;VFD2~4 온도 컬럼에서 &amp;plusmn;2.98e+38과 같은 물리적으로 불가능한 값이 발견되었다. 이는 Float32 자료형의 최댓값에 근접한 수치로, 센서 통신 단절 시 발생하는 오버플로우 값으로 판단된다. 정상 동작 온도 범위(화씨 기준 32~300&amp;deg;F)를 벗어난 값을 1차 제거하고, IQR 방식으로 2차 처리하는 방식을 적용하였다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;② FFCell_CycleManagement.csv &amp;mdash; 사이클 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 4컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q_Cell_CycleCount&lt;/td&gt;
&lt;td&gt;경과 사이클 수 (공정 중단 시 0으로 리셋)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I_MHS_GreenRocketTray&lt;/td&gt;
&lt;td&gt;Troy 감지 여부 (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_time&lt;/td&gt;
&lt;td&gt;타임스탬프&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;이벤트 설명 (약 49.5% 결측)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;③ FFCell_SafetyManagement.csv &amp;mdash; 안전 상태 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 6컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I_SafetyDoor1/2_Status&lt;/td&gt;
&lt;td&gt;안전문 상태 (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I_HMI_Estop_Status&lt;/td&gt;
&lt;td&gt;E-Stop 상태 (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I_Stopper1~5_Status&lt;/td&gt;
&lt;td&gt;스토퍼 상태 (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_time&lt;/td&gt;
&lt;td&gt;타임스탬프&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;이벤트 설명 (약 49.5% 결측)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;④ R01_Data.csv &amp;mdash; 로봇 1번 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 10컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I_R01_Gripper_Load&lt;/td&gt;
&lt;td&gt;그리퍼 하중 (물체 파지 여부)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I_R01_Gripper_Pot&lt;/td&gt;
&lt;td&gt;포텐셔미터 (그리퍼 개폐 상태)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M_R01_[B/L/U/R/S/T]JointAngle_Degree&lt;/td&gt;
&lt;td&gt;6축 관절 각도&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이상치 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gripper Load: 음수값 72개(0.01%) 발견. 하중 센서 특성상 음수는 물리적으로 발생할 수 없으며, 특정 시간대에 집중되지 않고 산발적으로 분포하여 센서 노이즈로 판단, 제거하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gripper Pot: 5,200 근처(그리퍼 열림)와 11,200 근처(그리퍼 닫힘)의 이중 분포(Bimodal Distribution) 확인. IQR 기준으로는 이상치로 분류되지만, 실제로는 그리퍼의 정상적인 열림/닫힘 동작을 반영한 정상 데이터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Joint Angle: 전체 시간의 약 87%는 홈 포지션 정지 상태, 13%만 실제 동작. 산업용 로봇의 일반적인 작업 사이클 패턴으로 이상치 없음.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⑤ R02_Data.csv &amp;mdash; 로봇 2번 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 10컬럼 (R01과 동일 구조)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R01과 다른 공정을 담당하는 로봇으로, 관절 각도 범위가 R01과 상이하다(-160도까지). 이는 설치 위치와 작업 내용이 다르기 때문이며 이상치가 아니다. R01 대비 동작 비율이 약 20%로 조금 더 높다. &lt;b&gt;이상치 없음&lt;/b&gt;.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⑥ R03_Data.csv &amp;mdash; 로봇 3번 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 10컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이상치 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gripper Load: 10,000을 초과하는 극단값이 소수 존재(최대 10,562). R01&amp;middot;R02의 정상 범위(최대 1,500 내외)와 비교하여 명확한 이상치로 판단.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;T Joint Angle: 181.8도까지의 값 발견. 산업용 로봇 T축의 물리적 동작 한계(&amp;plusmn;180도)를 초과하는 값으로, 4,029개(0.41%)를 이상치로 처리하였다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⑦ R04_Data.csv &amp;mdash; 로봇 4번 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구성&lt;/b&gt;: 974,836행 &amp;times; 10컬럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이상치 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gripper Load: 전체의 30%에 해당하는 292,732개가 음수값. 히스토그램 분석 결과 음수 구간(-2,000~0)과 양수 구간(0~1,000)이 각각 하나의 분포를 형성하는 것으로 확인되었다. 단순 센서 노이즈가 아닌 &lt;b&gt;별도의 동작 상태를 반영한 의미 있는 분포&lt;/b&gt;일 가능성이 있어 추가 도메인 확인이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gripper Pot: 음수값 4,472개(0.5%) 발견. 포텐셔미터는 물리적으로 음수가 불가능하므로 이상치로 처리 예정.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체 이상치 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 이상치 컬럼 내용 처리 방법&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Conveyor_Signals&lt;/td&gt;
&lt;td&gt;Q_VFD2~4_Temperature&lt;/td&gt;
&lt;td&gt;Float32 오버플로우값&lt;/td&gt;
&lt;td&gt;도메인 범위 + IQR 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R01_Data&lt;/td&gt;
&lt;td&gt;I_R01_Gripper_Load&lt;/td&gt;
&lt;td&gt;음수 72개 (0.01%)&lt;/td&gt;
&lt;td&gt;제거 후 선형 보간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03_Data&lt;/td&gt;
&lt;td&gt;I_R03_Gripper_Load&lt;/td&gt;
&lt;td&gt;10,000 초과 극단값&lt;/td&gt;
&lt;td&gt;제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03_Data&lt;/td&gt;
&lt;td&gt;M_R03_TJointAngle&lt;/td&gt;
&lt;td&gt;180도 초과 4,029개&lt;/td&gt;
&lt;td&gt;제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04_Data&lt;/td&gt;
&lt;td&gt;I_R04_Gripper_Load&lt;/td&gt;
&lt;td&gt;음수 30% &amp;mdash; 추가 확인 필요&lt;/td&gt;
&lt;td&gt;보류 (플래그 처리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04_Data&lt;/td&gt;
&lt;td&gt;I_R04_Gripper_Pot&lt;/td&gt;
&lt;td&gt;음수 4,472개 (0.5%)&lt;/td&gt;
&lt;td&gt;제거&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분석 후기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 탐색적 데이터 분석(EDA)을 통해 단순히 통계적 이상치 탐지(IQR, Z-score)만으로는 산업 데이터를 올바르게 처리하기 어렵다는 점을 확인하였다. Gripper Pot의 이중 분포나 R04 Gripper Load의 음수 분포처럼, &lt;b&gt;통계적으로는 이상치처럼 보이지만 실제로는 정상적인 동작 패턴을 반영하는 경우&lt;/b&gt;가 존재한다. 따라서 센서 데이터 전처리 시에는 통계적 방법과 도메인 지식을 함께 적용하는 것이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;1952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOuSQF/dJMcad3vDxD/5RyfE6OO6CyBik5I7KOvm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOuSQF/dJMcad3vDxD/5RyfE6OO6CyBik5I7KOvm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOuSQF/dJMcad3vDxD/5RyfE6OO6CyBik5I7KOvm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOuSQF%2FdJMcad3vDxD%2F5RyfE6OO6CyBik5I7KOvm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;772&quot; height=&quot;1952&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;1952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/61</guid>
      <comments>https://lshxkwh.tistory.com/61#entry61comment</comments>
      <pubDate>Wed, 24 Jun 2026 20:20:24 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 68일차 )</title>
      <link>https://lshxkwh.tistory.com/60</link>
      <description>&lt;h1&gt;데이터 선정 배경 및 소개&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 데이터 선정 배경&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 인식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트 제조 현장에서는 로봇, 컨베이어, 그리퍼, 안전장치 등 다양한 설비가 연동되어 제품을 자동 조립한다. 이러한 자동화 공정에서는 설비가 정상적으로 동작하더라도 &lt;b&gt;부품 누락, 파지 실패, 조립 순서 이상&lt;/b&gt; 같은 문제가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 부품이 누락되더라도 설비는 그냥 계속 동작하기 때문에 사람이 직접 확인하지 않으면 불량품이 그대로 다음 공정으로 넘어가는 문제가 있다. 수작업 확인 중심의 품질 관리는 반복성과 확장성이 낮아 자동화가 필요하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 선정 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 프로젝트에서 신라정보기술의 로봇 자동화 조립라인 데이터를 선정한 이유는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실무 연계성&lt;/b&gt; 실제 제조 현장에서 수집된 데이터로, 현업에서 발생하는 부품 누락 문제를 그대로 담고 있다. 단순한 실습용 데이터가 아닌 실제 공정 데이터를 분석하는 경험을 쌓을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;멀티모달 구조&lt;/b&gt; 시계열 센서 데이터와 이미지 데이터를 동시에 제공한다. 센서 데이터로 공정 중 이상 징후를 탐지하고, 이미지 데이터로 최종 조립 불량을 검출하는 두 가지 접근을 모두 시도할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명확한 라벨 구조&lt;/b&gt; 부품 누락 유형이 Normal, NoNose, NoNose,NoBody2, NoNose,NoBody2,NoBody1 네 가지로 명확하게 정의되어 있어 지도 학습 분류 모델을 바로 적용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;균형잡힌 클래스 분포&lt;/b&gt; 전체 276 사이클 중 정상 138개, 이상 138개로 완벽하게 균형잡힌 데이터다. 클래스 불균형 문제 없이 모델링을 진행할 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 데이터 소개&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 정보&lt;/h3&gt;
&lt;p&gt;항목 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;제공 기업&lt;/td&gt;
&lt;td&gt;신라정보기술&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;도메인&lt;/td&gt;
&lt;td&gt;스마트 제조, 로봇 자동화 조립라인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수집 기간&lt;/td&gt;
&lt;td&gt;2023-12-11 ~ 2023-12-12 (약 29시간)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수집률&lt;/td&gt;
&lt;td&gt;10Hz (0.1초마다 1번 기록)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;총 데이터&lt;/td&gt;
&lt;td&gt;974,836행 &amp;times; 7개 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사이클 수&lt;/td&gt;
&lt;td&gt;276개 완전 사이클&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;조립 제품&lt;/td&gt;
&lt;td&gt;4피스 로켓 (NoseCone + Body1 + Body2 + Body3)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공정 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4대의 로봇이 순서대로 작업을 이어받아 로켓을 조립한다.&lt;/p&gt;
&lt;p&gt;로봇 활성 구간 역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01&lt;/td&gt;
&lt;td&gt;0 ~ 30초&lt;/td&gt;
&lt;td&gt;초기 부품 파지 및 이송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02&lt;/td&gt;
&lt;td&gt;25 ~ 95초&lt;/td&gt;
&lt;td&gt;부품 이송 및 조립 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03&lt;/td&gt;
&lt;td&gt;50 ~ 130초&lt;/td&gt;
&lt;td&gt;NoseCone 조립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04&lt;/td&gt;
&lt;td&gt;200 ~ 310초&lt;/td&gt;
&lt;td&gt;최종 조립 마무리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 구성&lt;/h3&gt;
&lt;p&gt;파일명 역할 주요 컬럼 행 수&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R01_Data.csv&lt;/td&gt;
&lt;td&gt;로봇 1호 센서&lt;/td&gt;
&lt;td&gt;Gripper_Load, Gripper_Pot, 관절각도 6축 (B/L/R/S/T/U)&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R02_Data.csv&lt;/td&gt;
&lt;td&gt;로봇 2호 센서&lt;/td&gt;
&lt;td&gt;동일 구조&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R03_Data.csv&lt;/td&gt;
&lt;td&gt;로봇 3호 센서&lt;/td&gt;
&lt;td&gt;동일 구조&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R04_Data.csv&lt;/td&gt;
&lt;td&gt;로봇 4호 센서&lt;/td&gt;
&lt;td&gt;동일 구조&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conveyor_Signals.csv&lt;/td&gt;
&lt;td&gt;컨베이어 상태&lt;/td&gt;
&lt;td&gt;VFD 온도 4채널, 스토퍼 ON/OFF 5개&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FFCell_CycleManagement.csv&lt;/td&gt;
&lt;td&gt;공정 사이클 관리&lt;/td&gt;
&lt;td&gt;Q_Cell_CycleCount, I_MHS_GreenRocketTray&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FFCell_SafetyManagement.csv&lt;/td&gt;
&lt;td&gt;안전 시스템 상태&lt;/td&gt;
&lt;td&gt;SafetyDoor 1/2, HMI_EStop, CabinetESTOP&lt;/td&gt;
&lt;td&gt;974,836&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 신호 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gripper_Load&lt;/b&gt; 그리퍼(집게)가 부품을 집을 때 받는 하중 값이다. 부품을 제대로 집었을 때는 하중이 높고, 부품이 없거나 파지에 실패하면 하중이 낮게 나타난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gripper_Pot&lt;/b&gt; 그리퍼의 개폐 위치를 나타내는 포텐셔미터 값이다. 그리퍼가 열리고 닫히는 정도를 수치로 기록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관절각도 (B/L/R/S/T/U Joint)&lt;/b&gt; 로봇 팔의 6개 관절 각도를 각각 기록한다. 로봇이 움직일 때 각도가 변하고, 대기 중에는 고정된 값을 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q_VFD1~4_Temperature&lt;/b&gt; 컨베이어 모터를 제어하는 VFD(가변 주파수 드라이브) 장치의 온도다. 정상 운영 시 80~95&amp;deg;C 범위를 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q_Cell_CycleCount&lt;/b&gt; 현재 몇 번째 조립 사이클인지를 나타내는 카운터다. 이 값을 기준으로 데이터를 사이클 단위로 분할한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Description&lt;/b&gt; 이상이 발생한 시점에만 기록되는 컬럼으로, 어떤 부품이 누락됐는지를 나타낸다. 값이 없는 경우(결측)는 정상 상태를 의미한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라벨 구조&lt;/h3&gt;
&lt;p&gt;라벨 사이클 수 비율 의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;td&gt;50.0%&lt;/td&gt;
&lt;td&gt;정상 조립 완료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;14.1%&lt;/td&gt;
&lt;td&gt;NoseCone 누락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose,NoBody2&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;16.3%&lt;/td&gt;
&lt;td&gt;NoseCone + Body2 누락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoNose,NoBody2,NoBody1&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;19.6%&lt;/td&gt;
&lt;td&gt;NoseCone + Body2 + Body1 누락&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;합계&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;276&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;100%&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누락은 항상 NoseCone부터 시작되는 누적 구조다. Body2가 누락되면 반드시 NoseCone도 누락되어 있고, Body1이 누락되면 NoseCone과 Body2도 함께 누락된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 품질 이슈&lt;/h3&gt;
&lt;p&gt;이슈 대상 컬럼 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100% 결측&lt;/td&gt;
&lt;td&gt;CabinetESTOP&lt;/td&gt;
&lt;td&gt;센서 미연결로 데이터 전혀 없음 &amp;rarr; 분석 제외&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49.5% 결측&lt;/td&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;결측 = 정상 상태를 의미 &amp;rarr; Normal로 대체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Float 오버플로&lt;/td&gt;
&lt;td&gt;Q_VFD2~4_Temperature&lt;/td&gt;
&lt;td&gt;센서 통신 오류로 &amp;plusmn;1e36 ~ &amp;plusmn;1e38 극단값 발생 &amp;rarr; IQR 기준 제거 후 보간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;음수 센서값&lt;/td&gt;
&lt;td&gt;I_R01_Gripper_Load&lt;/td&gt;
&lt;td&gt;최솟값 -259, 물리적으로 불가능한 값 &amp;rarr; 0으로 클리핑&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/60</guid>
      <comments>https://lshxkwh.tistory.com/60#entry60comment</comments>
      <pubDate>Tue, 23 Jun 2026 20:51:45 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 67일차 )</title>
      <link>https://lshxkwh.tistory.com/59</link>
      <description>&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;오늘 학습한 핵심은 데이터의 흐름을 읽고 연속적인 숫자를 예측하는 회귀 분석(Regression)입니다. 단순한 직선 형태의 선형 회귀부터, 복잡한 데이터 패턴을 잡기 위한 다항 회귀, 그리고 모델의 과적합(Overfitting)을 방지하여 일반화 성능을 높이는 규제(Regularization) 기법과 평가 지표를 체계적으로 다루었습니다.&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size26&quot;&gt;회귀 모델 핵심 유형 비교&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;6&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;주의할 점&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0,0&quot;&gt;선형 회귀&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,1,1,0&quot;&gt;독립변수와 종속변수 간의 직선 관계를 모델링&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,1,2,0&quot;&gt;모델이 가볍고 해석이 매우 직관적임&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,1,3,0&quot;&gt;데이터 자체의 비선형성을 반영하기 어려움&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0,0&quot;&gt;다항 회귀&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,2,1,0&quot;&gt;독립변수의 고차항을 추가하여 곡선 형태의 관계 모델링&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,2,2,0&quot;&gt;복잡한 데이터 패턴을 유연하게 학습 가능&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,2,3,0&quot;&gt;차수가 높아질수록 과적합 위험이 커짐&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,3,0,0&quot;&gt;릿지 (Ridge)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,3,1,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;L_2&quot;&gt;L2&lt;/span&gt;&amp;nbsp;규제를 더해 가중치 크기를 전반적으로 줄임&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,3,2,0&quot;&gt;변수 간 상관관계가 높을 때 안정적임&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,3,3,0&quot;&gt;변수를 완전히 제거하지는 못함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,4,0,0&quot;&gt;라쏘 (Lasso)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,4,1,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;L_1&quot;&gt;L1&lt;/span&gt;규제를 더해 불필요한 가중치를 0으로 만듦&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,4,2,0&quot;&gt;중요한 변수만 선택하여 모델을 단순화함&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;6,4,3,0&quot;&gt;상관관계가 높은 변수 중 하나만 임의 선택됨&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-path-to-node=&quot;8&quot; data-ke-size=&quot;size26&quot;&gt;1. 회귀 분석(Regression)의 기본 개념&lt;/h2&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;회귀 분석이란?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;정의&lt;/b&gt;: 하나 이상의 독립변수와 종속변수&amp;nbsp;간의 관계를 추정하여, 연속형 종속변수를 예측하는 통계 및 머신러닝 기법입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;예시&lt;/b&gt;: 공부 시간에 따른 시험 점수예측, 실내 온도에 따른 에어컨 전력 소비량&amp;nbsp;예측 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size23&quot;&gt;지도학습 내에서의 비교&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;분류 (Classification)&lt;/b&gt;: 결과값이 범주형(이산형) 데이터인 경우 (예: 합격/불합격, 스팸 메일 여부).&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0&quot;&gt;회귀 (Regression)&lt;/b&gt;: 결과값이 연속형(실수형) 데이터인 경우 (예: 주가, 매출액, 온도).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;13&quot; data-ke-size=&quot;size23&quot;&gt;회귀 모델을 사용하는 이유&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;14&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,0&quot;&gt;미래 값 예측&lt;/b&gt;: 과거의 데이터를 바탕으로 연속적인 실숫값을 예측합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,0&quot;&gt;인과 관계 해석&lt;/b&gt;: 어떤 독립변수가 종속변수에 얼마나 큰 영향을 미치는지 통계적으로 분석합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,2,0&quot;&gt;데이터 기반 의사결정&lt;/b&gt;: 트렌드를 파악하고 자원을 효율적으로 배분하는 기준을 제공합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-path-to-node=&quot;16&quot; data-ke-size=&quot;size26&quot;&gt;2. 선형 회귀 (Linear Regression)&lt;/h2&gt;
&lt;h3 data-path-to-node=&quot;17&quot; data-ke-size=&quot;size23&quot;&gt;개념 및 회귀식&lt;/h3&gt;
&lt;p data-path-to-node=&quot;18&quot; data-ke-size=&quot;size16&quot;&gt;독립변수와 종속변수가 직선적인 관계를 맺고 있다고 가정하는 모델입니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;21&quot; data-ke-size=&quot;size23&quot;&gt;학습 과정&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;22&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,0,0&quot;&gt;가중치 초기화&lt;/b&gt;: 회귀계수의 초기값을 임의로 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,1,0&quot;&gt;손실함수(Loss Function) 설정&lt;/b&gt;: 모델의 예측값과 실제값의 차이를 평가할 기준을 정합니다. (주로 MSE 활용)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,2,0&quot;&gt;최적화(Optimization)&lt;/b&gt;: 최소자승법(OLS)이나 경사하강법(Gradient Descent)을 통해 손실을 최소화하는 방향으로 가중치를 업데이트합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,3,0&quot;&gt;예측 수행&lt;/b&gt;: 최적의 가중치를 찾아낸 후 새로운 데이터가 입력되면 결과를 출력합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;23&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,0,0&quot;&gt;장점&lt;/b&gt;: 구현이 쉽고 속도가 빠르며, 회귀계수를 통해 변수의 영향력을 직관적으로 해석할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,1,0&quot;&gt;단점&lt;/b&gt;: 실제 데이터가 복잡한 곡선 형태(비선형)일 경우 예측력이 크게 떨어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;25&quot; data-ke-size=&quot;size26&quot;&gt;3. 다항 회귀 (Polynomial Regression)&lt;/h2&gt;
&lt;h3 data-path-to-node=&quot;26&quot; data-ke-size=&quot;size23&quot;&gt;개념 및 필요성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;27&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 직선이 아닌 곡선 형태의 분포를 보일 때, 독립변수에 고차항을 포함시켜 학습하는 방식입니다.&lt;/li&gt;
&lt;li&gt;이를 통해 선형 회귀의 단순함을 극복하고 복잡한 관계를 표현할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;28&quot; data-ke-size=&quot;size23&quot;&gt;주의점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;29&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;차수(Degree)를 너무 높이면 훈련 데이터에만 완벽하게 맞추어지는 과적합(Overfitting)이 발생하여, 새로운 데이터에 대한 예측력이 급격히 떨어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;31&quot; data-ke-size=&quot;size26&quot;&gt;4. 회귀 모델 평가 지표&lt;/h2&gt;
&lt;p data-path-to-node=&quot;32&quot; data-ke-size=&quot;size16&quot;&gt;모델이 얼마나 잘 예측했는지 평가하기 위해 다음과 같은 지표를 활용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;33&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,0,0&quot;&gt;MSE (Mean Squared Error - 평균 제곱 오차)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;33,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예측값과 실제값 오차의 제곱 평균입니다.&lt;/li&gt;
&lt;li&gt;오차가 커질수록 패널티가 크게 부여되는 특성이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,1,0&quot;&gt;MAE (Mean Absolute Error - 평균 절대 오차)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;33,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예측값과 실제값 오차의 절대값 평균입니다.&lt;/li&gt;
&lt;li&gt;직관적이며 아웃라이어(이상치)의 영향에 비교적 강건합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,2,0&quot;&gt;RMSE (Root Mean Squared Error - 평균 제곱근 오차)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;33,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MSE에 루트를 씌운 지표입니다.&lt;/li&gt;
&lt;li&gt;제곱으로 인해 왜곡된 단위를 실제 데이터의 단위와 맞춰주어 해석이 용이합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;33,3,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;R^2&quot;&gt;R^2&lt;/span&gt;&amp;nbsp;(Coefficient of Determination - 결정 계수)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;33,3,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델이 데이터의 분산을 얼마나 설명하는지 나타내는 비율입니다.&lt;/li&gt;
&lt;li&gt;0과 1 사이의 값을 가지며, 1에 가까울수록 모델의 설명력이 높음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;35&quot; data-ke-size=&quot;size26&quot;&gt;5. 과적합을 막는 규제 기법 (Regularization)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;모델이 훈련 데이터에 과도하게 맞추어져 회귀계수가 비대해지는 것을 방지하기 위해 가중치에 패널티를 부여하는 방법입니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;37&quot; data-ke-size=&quot;size23&quot;&gt;릿지 회귀 (Ridge Regression)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;38&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;38,0,0&quot;&gt;특징&lt;/b&gt;: 가중치들의 제곱합(&lt;span data-index-in-node=&quot;14&quot; data-math=&quot;L_2&quot;&gt;L2&lt;/span&gt;&amp;nbsp;규제)을 손실함수에 더합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;38,1,0&quot;&gt;효과&lt;/b&gt;: 가중치의 크기를 전체적으로 작게 줄여주어 모델의 변동성을 낮춥니다. 변수가 많고 서로 연관성이 높을 때 효과적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;39&quot; data-ke-size=&quot;size23&quot;&gt;라쏘 회귀 (Lasso Regression)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;40&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;40,0,0&quot;&gt;특징&lt;/b&gt;: 가중치들의 절대값 합(&lt;span data-index-in-node=&quot;16&quot; data-math=&quot;L_1&quot;&gt;L1&lt;/span&gt;규제)을 손실함수에 더합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;40,1,0&quot;&gt;효과&lt;/b&gt;: 중요하지 않은 변수의 가중치를 완전히 0으로 만듭니다. 이를 통해 자동으로 변수 선택(Feature Selection)이 이루어져 모델이 간결해집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;42&quot; data-ke-size=&quot;size26&quot;&gt;전략적 제언 (Strategic Suggestions)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;43&quot; data-ke-size=&quot;size16&quot;&gt;회귀 모델을 실무나 프로젝트에 적용할 때는 다음 단계를 고려하는 것이 좋습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;44&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;44,0,0&quot;&gt;기본 모델 설정&lt;/b&gt;: 가장 먼저 단순 선형 회귀(Linear Regression)를 적용하여 데이터의 기본 베이스라인 성능을 확인하십시오.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;44,1,0&quot;&gt;잔차 분석 및 진단&lt;/b&gt;: 예측 결과의 오차 분포를 시각화하여 데이터가 선형성을 따르는지, 혹은 특정 비선형 패턴이나 이상치가 존재하는지 파악해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;44,2,0&quot;&gt;규제 모델 도입&lt;/b&gt;: 변수의 개수가 많거나 과적합 징후가 보인다면 바로 Ridge나 Lasso를 적용하여 모델의 가중치를 안정화하십시오. 특히 변수 해석이 중요하다면 Lasso를 통해 주요 변수를 솎아내는 것이 유리합니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/59</guid>
      <comments>https://lshxkwh.tistory.com/59#entry59comment</comments>
      <pubDate>Wed, 17 Jun 2026 19:57:43 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 66일차 )</title>
      <link>https://lshxkwh.tistory.com/58</link>
      <description>&lt;h1&gt;NASA C-MAPSS 항공 엔진 수명 예측 프로젝트&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;처음부터 딥러닝까지들어가며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 NASA에서 공개한 항공 엔진 데이터셋(C-MAPSS FD001)으로&lt;br /&gt;엔진이 언제 고장날지 예측하는 AI 모델을 처음부터 만들어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝부터 시작해서 딥러닝까지 단계별로 진행했고,&lt;br /&gt;최종적으로 RMSE 9.40 / 조기경보 정확도 96% 를 달성했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 문제 정의&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 이 문제가 중요한가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항공사는 엔진 고장 시점을 미리 알 수 없어서 두 가지 문제가 생긴다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;과도한 예방 정비&lt;/b&gt; &amp;rarr; 멀쩡한 엔진을 너무 자주 정비 &amp;rarr; 비용 낭비&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예상치 못한 고장&lt;/b&gt; &amp;rarr; 결항, 안전사고 &amp;rarr; 훨씬 큰 손실&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 센서 데이터로 &lt;b&gt;남은 수명(RUL, Remaining Useful Life)&lt;/b&gt; 을 예측해서&lt;br /&gt;적절한 시점에 정비하는 것이 목표다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성공 기준&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 목표&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RMSE&lt;/td&gt;
&lt;td&gt;&amp;le; 30 사이클&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;조기경보 정확도&lt;/td&gt;
&lt;td&gt;&amp;ge; 85% (RUL &amp;le; 30 구간)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조기경보란?&lt;/b&gt; 고장이 30사이클 이내로 임박한 엔진을 얼마나 잘 탐지하는지&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 데이터 소개 (NASA C-MAPSS FD001)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;엔진 수&lt;/b&gt;: Train 100대 / Test 100대&lt;/li&gt;
&lt;li&gt;&lt;b&gt;센서&lt;/b&gt;: 21개 (온도, 압력, 팬 속도 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구조&lt;/b&gt;: 엔진이 고장날 때까지 매 사이클 센서값 기록 (run-to-failure)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼&lt;/b&gt;: unit(엔진번호), cycle(사이클), os1~3(운전조건), s1~s21(센서)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# 데이터 로드
COLS = ['unit', 'cycle'] + [f'os{i}' for i in range(1,4)] + [f's{i}' for i in range(1,22)]
train = pd.read_csv(&quot;train_FD001.txt&quot;, sep=r'\s+', header=None, names=COLS)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 분석 파이프라인&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Step 1. 데이터 로드
Step 2. RUL 레이블 생성
Step 3. 센서 선택 (분산 기반)
Step 4. 전처리 (정규화 + 이동평균)
Step 5. 머신러닝 모델 학습/비교
Step 6. 피처 중요도 &amp;amp; 정비 권고
Step 7. 조기경보 개선 (가중치 조정)
Step 8. LSTM 딥러닝 적용
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 핵심 전처리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;RUL 레이블 생성 (Piecewise Linear)&lt;/h3&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;RUL_CLIP = 110  # 클리핑 기준

# RUL = 고장 사이클 - 현재 사이클
max_cycle = train.groupby('unit')['cycle'].max()
train['RUL'] = (max_cycle - train['cycle']).clip(upper=RUL_CLIP)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클리핑을 적용하는 이유는 엔진 초기에는 열화가 거의 없기 때문이다.&lt;br /&gt;RUL이 200이든 110이든 모델 입장에선 똑같이 &quot;아직 멀쩡함&quot;이라서&lt;br /&gt;125 이상은 전부 125로 잘라줬다. (이후 110으로 최적화)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;센서 선택 (분산 기반 필터링)&lt;/h3&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;sensor_std = train[SENSOR_COLS].std()
SELECTED_SENSORS = sensor_std[sensor_std &amp;gt; 0.1].index.tolist()
# 21개 &amp;rarr; 11개로 축소
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21개 센서 중 값이 거의 변하지 않는 센서는 열화 정보가 없으므로 제거했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이동평균으로 노이즈 제거&lt;/h3&gt;
&lt;pre class=&quot;gml&quot;&gt;&lt;code&gt;# 5사이클 이동평균 추가
df[f'{s}_ma'] = df.groupby('unit')[s].transform(
    lambda x: x.rolling(5, min_periods=1).mean()
)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 머신러닝 모델 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개 모델을 비교했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 RMSE 조기경보&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;선형 회귀&lt;/td&gt;
&lt;td&gt;20.67&lt;/td&gt;
&lt;td&gt;40.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;랜덤 포레스트&lt;/td&gt;
&lt;td&gt;18.51&lt;/td&gt;
&lt;td&gt;68.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;그래디언트 부스팅&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;17.23&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;68.0%&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RMSE는 목표(30)를 달성했지만 &lt;b&gt;조기경보 68%로 목표(85%) 미달&lt;/b&gt;.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 조기경보 개선 시도&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;가중치 조정&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# RUL &amp;le; 30 구간에 더 높은 가중치 부여
sample_weight = np.where(y_train &amp;lt;= 30, 5.0, 1.0)
model.fit(X_train, y_train, sample_weight=sample_weight)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: &lt;b&gt;72%까지 상승했지만 85% 달성 실패&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;한계 발견&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝의 근본적인 문제를 발견했다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;머신러닝: 사이클 150의 센서값 1개 &amp;rarr; RUL 예측
LSTM:    사이클 101~150, 50개 흐름 &amp;rarr; RUL 예측
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RUL 후반부는 &lt;b&gt;한 시점의 스냅샷이 아니라 열화 추세&lt;/b&gt;로 봐야 한다.&lt;br /&gt;&amp;rarr; &lt;b&gt;LSTM(딥러닝)으로 전환 결정&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. LSTM 딥러닝 적용&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LSTM이 뭔가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝의 한 종류로, &lt;b&gt;시계열 데이터의 흐름&lt;/b&gt;을 학습할 수 있다.&lt;br /&gt;여러 층(Layer)을 쌓아서 패턴을 추출한다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;AI &amp;gt; 머신러닝 &amp;gt; 딥러닝 &amp;gt; LSTM
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 구조&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;model = Sequential([
    LSTM(256, return_sequences=True),  # 시계열 패턴 추출
    Dropout(0.2),                       # 과적합 방지
    LSTM(128, return_sequences=False),  # 패턴 압축
    Dropout(0.2),
    Dense(64, activation='relu'),
    Dense(32, activation='relu'),
    Dense(1)                            # RUL 수치 출력
])
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시퀀스 데이터 생성&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;SEQ_LEN = 50  # 최근 50사이클을 보고 예측

# 50사이클 단위로 슬라이딩 윈도우
for i in range(len(engine) - SEQ_LEN + 1):
    X.append(data[i:i + SEQ_LEN])
    y.append(RUL[i + SEQ_LEN - 1])
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;조기경보 구간 가중치 세분화&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;sample_weight = np.where(y_train &amp;lt;= 15, 10.0,   # 긴급 구간 10배
                np.where(y_train &amp;lt;= 30,  5.0,   # 경보 구간 5배
                1.0))                            # 정상 구간 1배
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 최종 결과&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성능 비교&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 RMSE 조기경보&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;그래디언트 부스팅 (베이스라인)&lt;/td&gt;
&lt;td&gt;17.23&lt;/td&gt;
&lt;td&gt;68.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LSTM (초기)&lt;/td&gt;
&lt;td&gt;11.40&lt;/td&gt;
&lt;td&gt;72.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LSTM (최종 튜닝)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;9.40&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;96.0%&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성공 기준 달성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 목표 결과 상태&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RMSE&lt;/td&gt;
&lt;td&gt;&amp;le; 30&lt;/td&gt;
&lt;td&gt;&lt;b&gt;9.40&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;달성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;조기경보&lt;/td&gt;
&lt;td&gt;&amp;ge; 85%&lt;/td&gt;
&lt;td&gt;&lt;b&gt;96.0%&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;달성&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 정비 권고 시스템&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 RUL을 4등급으로 분류해서 정비 우선순위를 자동 산출했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등급 조건 조치&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;  긴급 정비&lt;/td&gt;
&lt;td&gt;RUL &amp;le; 15&lt;/td&gt;
&lt;td&gt;즉시 운항 중단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  경보 발령&lt;/td&gt;
&lt;td&gt;RUL &amp;le; 30&lt;/td&gt;
&lt;td&gt;정비 일정 즉시 수립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  주의 관찰&lt;/td&gt;
&lt;td&gt;RUL &amp;le; 60&lt;/td&gt;
&lt;td&gt;집중 모니터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;  정상 운항&lt;/td&gt;
&lt;td&gt;RUL &amp;gt; 60&lt;/td&gt;
&lt;td&gt;정상 운항 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;10. 배운 것&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기술적으로&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;RUL 클리핑&lt;/b&gt;이 모델 안정성에 핵심적인 역할을 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Data Leakage 주의&lt;/b&gt;: 정규화는 반드시 Train 기준으로 fit 후 Test에 transform&lt;/li&gt;
&lt;li&gt;&lt;b&gt;머신러닝의 한계&lt;/b&gt;: 행 단위 학습으로는 시계열 흐름 반영 불가 &amp;rarr; LSTM 필요&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가중치 조정&lt;/b&gt;: 중요한 구간(고장 임박)에 높은 가중치를 주면 해당 구간 성능 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;분석 프로세스로&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성공 기준을 &lt;b&gt;수치로 명확하게&lt;/b&gt; 정의하고 시작하는 게 중요&lt;/li&gt;
&lt;li&gt;딥러닝이 항상 답이 아님. 머신러닝으로 먼저 베이스라인 잡고 한계 확인 후 전환&lt;/li&gt;
&lt;li&gt;RMSE가 좋아도 &lt;b&gt;비즈니스 관점(조기경보)&lt;/b&gt; 이 안 되면 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/58</guid>
      <comments>https://lshxkwh.tistory.com/58#entry58comment</comments>
      <pubDate>Tue, 16 Jun 2026 19:57:15 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 65일차 )</title>
      <link>https://lshxkwh.tistory.com/57</link>
      <description>&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;01. 왜 어려운가&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;문제 정의는 왜 어려울까?&lt;/h2&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 분석 프로세스에서 문제 정의는 가장 첫 단계이자 이후 모든 단계의 전제조건입니다. 그런데 역설적으로, 문제 정의 단계는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;가장 적은 데이터와 정보&lt;/b&gt;를 가지고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;가장 중요한 결정&lt;/b&gt;을 내려야 하는 단계입니다.&lt;/p&gt;
&lt;div&gt;단계보유 정보량결정의 영향력
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;문제 정의&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;매우 적음&lt;/td&gt;
&lt;td style=&quot;color: #7f2c28;&quot;&gt;매우 큼 &amp;mdash; 이후 전체 방향 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;EDA / 전처리&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;데이터 확보 후 풍부&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;모델링&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;풍부&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;평가&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;풍부&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;작음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed; color: #3d3d3a;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정보는 가장 적은데 결정의 무게는 가장 무겁다&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 이것이 문제 정의가 구조적으로 어려운 첫 번째 이유입니다.&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;02. 구조적 원인&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;문제 정의가 어려운 4가지 이유&lt;/h2&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;이유 1&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;되돌릴 수 없는 결정&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;Target 변수, 문제 유형, 평가 지표는 모든 단계의 기준. 문제 정의가 잘못되면 처음부터 다시 시작해야 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;이유 2&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;언어의 불일치&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;불량률이 높아요&quot;는 현장 언어. 데이터는 수치화된 Target과 평가 지표가 필요합니다. 이 번역에 정답은 없습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;이유 3&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;복합 문제로 제시됨&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;현실의 문제는 여러 소문제가 뒤엉킨 복합 문제입니다. 분해하지 않으면 시작 자체가 불가능합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;이유 4&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;오류가 늦게 드러남&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;문제 정의가 잘못돼도 EDA&amp;middot;모델링은 정상으로 진행됩니다. 오류는 현장 배포 후에야 발견됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;h3 style=&quot;color: #141413;&quot; data-ke-size=&quot;size23&quot;&gt;실제 사례로 보는 어려움&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #f6eedf; color: #5a4815;&quot;&gt;이유 1 &amp;mdash; 되돌릴 수 없는 결정&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;배터리 제조 QA: 잘못된 Target 변수 정의&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;불량 여부(정상/불량) 분류 모델로 98% 정확도 달성. 그러나 현장은 &quot;며칠 만에 불량이 될지&quot;가 필요했습니다. 결국 수명 예측(회귀) 문제로 전면 재정의 &amp;mdash; EDA, 피처 엔지니어링, 모델 학습까지 전부 무효화.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #f6eedf; color: #5a4815;&quot;&gt;이유 2 &amp;mdash; 언어 번역 문제&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;&quot;불량률이 높다&quot;는 말의 3가지 해석&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;사출 성형 공정에서의 동일한 피드백이 (1) 외관 불량 분류 / (2) 공정 파라미터 이상 감지 / (3) 금형 수명 예측 으로 번역될 수 있습니다. 어떤 해석을 선택하느냐에 따라 데이터, 모델, 담당 부서까지 완전히 달라집니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #f6eedf; color: #5a4815;&quot;&gt;이유 4 &amp;mdash; 지연된 피드백&lt;/div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;전자부품 외관 검사: 정확도 99.2% 모델의 함정&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;실제 불량률이 0.5%라면 모두 &quot;정상&quot; 판정해도 99.5% 정확도. 모델은 불량을 하나도 잡아내지 못했지만, 오류는 현장 배포 후 불량품 출하로 발견됐습니다. Precision/Recall 또는 F1-Score를 지표로 선택했어야 했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;03. 해법&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;왜 단계를 나누는 것이 해법인가&lt;/h2&gt;
&lt;div&gt;어려움단계 분해를 통한 완화
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;정보 비대칭&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;작은 단위로 나누면 각 단계에서 필요한 정보가 명확해짐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;언어 번역 문제&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;비즈니스 관점 &amp;rarr; ML 관점으로 단계를 나누어 번역 과정을 명시화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;복합 문제&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;전체 &amp;rarr; 하위 문제 1 &amp;rarr; 하위 문제 2 순으로 분해해 독립 검증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;지연된 피드백&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;각 단계마다 입력/출력과 성공 기준을 정의해 조기에 오류 발견&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed; color: #3d3d3a;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문제 정의가 어렵다&lt;/b&gt;는 것은 한 번에 너무 많은 것을 결정해야 해서 어렵다는 의미. 해법은 결정들을 단계별로 쪼개어 각 단계마다 검증 가능한 작은 결정으로 바꾸는 것입니다.&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;04. 단계적 접근법&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;커피 내리기로 이해하는 단계 분해&lt;/h2&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;바리스타에게 익숙한 커피 내리기 행위도 로봇에게는 수많은 독립 문제입니다. 이를 분해하면:&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #141413;&quot;&gt;1&lt;/div&gt;
&lt;div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;도구 선택&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;드리퍼와 컵의 크기&amp;middot;형태를 시각적으로 인식해 적합 여부 판단&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #141413;&quot;&gt;2&lt;/div&gt;
&lt;div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;재료 계량&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;스쿱의 부피와 원두 색상&amp;middot;질감을 시각적으로 판단해 측정&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #141413;&quot;&gt;3&lt;/div&gt;
&lt;div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;물 온도 조절&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;온도계 없이 기포 상태나 수증기 양으로 90~95&amp;deg;C 판단&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #141413;&quot;&gt;4&lt;/div&gt;
&lt;div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;드립 속도 제어&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;유량 센서 없이 물줄기 굵기와 속도를 시각적으로 조정&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #141413;&quot;&gt;5&lt;/div&gt;
&lt;div&gt;
&lt;h4 style=&quot;color: #141413;&quot; data-ke-size=&quot;size20&quot;&gt;완료 판단&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;색상&amp;middot;추출량 기준으로 적절히 추출되었는지 감지 후 동작 중단&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;분해하면 각 단계별&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;분석 목표, 입력, 출력, 데이터 형태&lt;/b&gt;까지 설계할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;05. 좋은 문제 정의&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;나쁜 정의 vs 좋은 정의&lt;/h2&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;좋은 문제 정의에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;타깃 변수 &amp;middot; 평가 지표 &amp;middot; 기준값&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;세 가지가 명시되어야 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #f7ecec;&quot;&gt;
&lt;div style=&quot;color: #7f2c28;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;나쁜 예&lt;/div&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;공정이 이상할 때 알려주는 AI를 만든다&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #e9f1dc;&quot;&gt;
&lt;div style=&quot;color: #265b19;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;좋은 예&lt;/div&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;웨이퍼 식각 공정에서 온도&amp;middot;압력&amp;middot;가스 유량 센서 데이터를 실시간 수집하여, 정상 패턴 대비 이상 점수가 임계값의 1.5배를 초과할 경우 경보 발송 + 기여도 상위 3개 센서 제공&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;확인 항목나쁜 예좋은 예
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;타깃 변수&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;&quot;이상&quot;이 무엇인지 불명확&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;온도&amp;middot;압력&amp;middot;가스 유량 센서 이상 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;평가 지표&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;F1-Score / Precision / Recall / 오경보율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;기준값&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;color: #3d3d3a;&quot;&gt;정상 패턴 대비 이상 점수 1.5배 초과&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;06. 문제 유형 선택&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;회귀 vs 분류, 어떻게 고를까&lt;/h2&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;h4 style=&quot;color: #3266ad;&quot; data-ke-size=&quot;size20&quot;&gt;회귀 (Regression)&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;질문:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;얼마나?&quot;&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연속적인 수치&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;배터리 잔여 수명 예측, 불량률 수치 예측&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지표:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;RMSE, MAE, MAPE&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;h4 style=&quot;color: #265b19;&quot; data-ke-size=&quot;size20&quot;&gt;분류 (Classification)&lt;/h4&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;질문:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;어느 쪽인가?&quot;&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이산적인 카테고리&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;불량/정상 판정, 불량 유형 분류&lt;/p&gt;
&lt;p style=&quot;color: #3d3d3a;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지표:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;정확도, F1-Score, AUC&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed; color: #3d3d3a;&quot;&gt;&lt;b&gt;선택 기준:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;현장에서 최종적으로 필요한 것이 &quot;숫자&quot;인가, &quot;결정&quot;인가를 먼저 확인하세요.&lt;br /&gt;&amp;bull; &quot;불량률이 몇 %인지 알고 싶다&quot; &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;회귀&lt;/b&gt;&lt;br /&gt;&amp;bull; &quot;이 제품을 출하해도 되는지 알고 싶다&quot; &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;분류&lt;/b&gt;&lt;br /&gt;&amp;bull; 둘 다 필요하다면 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;회귀 &amp;rarr; 분류 2단계 구조&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;07. 체크리스트&lt;/div&gt;
&lt;h2 style=&quot;color: #141413;&quot; data-ke-size=&quot;size26&quot;&gt;문제 정의 체크리스트&lt;/h2&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;h3 style=&quot;color: #141413;&quot; data-ke-size=&quot;size23&quot;&gt;비즈니스 관점&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;누가, 무엇을, 왜 원하는지 명확히 정의했는가?&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;False Positive vs False Negative 중 무엇이 더 위험한지 검토했는가?&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;모델 결과를 현장에서 어떻게 활용할 시나리오가 있는가?&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f5f4ed;&quot;&gt;
&lt;h3 style=&quot;color: #141413;&quot; data-ke-size=&quot;size23&quot;&gt;데이터&amp;middot;모델링 관점&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;Target 변수가 수치로 명확히 정의되었는가?&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;성공 기준에 수치화된 기준값이 포함되었는가? (예: F1 &amp;ge; 0.9, MAPE &amp;le; 5%)&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;필요한 데이터가 실제로 존재하고 수집 가능한가?&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;문제를 독립적인 하위 문제로 분해했는가?&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/57</guid>
      <comments>https://lshxkwh.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 15 Jun 2026 20:53:04 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 64일차 )</title>
      <link>https://lshxkwh.tistory.com/56</link>
      <description>&lt;h1&gt;BMW i3 실주행 데이터로 주행거리 예측 모델링 중간 점검 (D-2)&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CatBoost 기반 EV 항속거리 예측 모델 구축기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기차를 타는 사람이라면 한 번쯤은 이런 고민을 해봤을 것이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;지금 배터리로 정말 목적지까지 갈 수 있을까?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이른바 &lt;b&gt;Range Anxiety(주행거리 불안)&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트에서는 BMW i3의 실제 주행 데이터를 활용하여 주행거리에 영향을 미치는 요인을 분석하고, 머신러닝 모델을 이용해 주행거리를 예측해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 CatBoost 모델을 통해 &lt;b&gt;R&amp;sup2; 0.941, 평균 RMSE 3.08km&lt;/b&gt;의 성능을 얻을 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 프로젝트에서 더 중요했던 것은 높은 성능보다도, 그 성능이 어떤 의미를 가지는지 이해하는 과정이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;왜 BMW i3를 선택했을까?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BMW i3는 전기차 시장 초기의 대표적인 혁신 모델이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2013년 출시 당시에는 탄소섬유 차체, 경량 설계, 미래지향적 디자인 등으로 많은 주목을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 2022년 결국 단종되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유를 살펴보면 가장 큰 원인 중 하나는 항속거리 경쟁력 부족이었다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;22kWh 배터리 탑재&lt;/li&gt;
&lt;li&gt;실주행 거리 약 130~160km&lt;/li&gt;
&lt;li&gt;Tesla Model 3 등 장거리 EV 등장&lt;/li&gt;
&lt;li&gt;경쟁 차종 대비 짧은 주행거리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기차 시장이 성장할수록 소비자들은 더 긴 주행거리를 원했고, 결국 항속거리는 차량 경쟁력을 결정하는 핵심 요소가 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음과 같은 질문이 생겼다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;실제 주행 데이터만으로 주행거리를 얼마나 정확하게 예측할 수 있을까?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;데이터셋 소개&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트에서 사용한 데이터는 BMW i3의 실제 주행 데이터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;차량&lt;/td&gt;
&lt;td&gt;BMW i3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;트립 수&lt;/td&gt;
&lt;td&gt;70개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TripA&lt;/td&gt;
&lt;td&gt;22개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TripB&lt;/td&gt;
&lt;td&gt;48개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;총 데이터 수&lt;/td&gt;
&lt;td&gt;109,505 행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최종 분석 데이터&lt;/td&gt;
&lt;td&gt;70 &amp;times; 17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수집된 데이터에는 다음과 같은 정보가 포함되어 있었다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;속도(Velocity)&lt;/li&gt;
&lt;li&gt;배터리 전류(Current)&lt;/li&gt;
&lt;li&gt;배터리 온도&lt;/li&gt;
&lt;li&gt;SoC(State of Charge)&lt;/li&gt;
&lt;li&gt;고도(Elevation)&lt;/li&gt;
&lt;li&gt;난방 전력(Heating Power)&lt;/li&gt;
&lt;li&gt;공조 전력(Air Conditioning Power)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 차량의 움직임뿐 아니라 배터리 상태와 HVAC 데이터까지 함께 포함된 데이터셋이었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;데이터 전처리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 차량 데이터는 그대로 사용할 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 데이터 품질을 확보하기 위해 전처리 과정을 진행했다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;원본 데이터
&amp;darr;
1초 단위 리샘플링
&amp;darr;
결측치 보간
&amp;darr;
파생변수 생성
&amp;darr;
Trip 단위 집계
&amp;darr;
변수 선택
&amp;darr;
최종 모델링 데이터셋 생성
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;Feature Engineering&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순 평균값만으로는 차량의 특성을 충분히 설명하기 어려웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 시계열 특성을 반영할 수 있는 파생변수를 생성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적으로 다음 변수들이 사용되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Elevation_MA3_std&lt;/td&gt;
&lt;td&gt;고도 변화 변동성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SoC_lag1_std&lt;/td&gt;
&lt;td&gt;SoC 변동성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Velocity_diff_mean&lt;/td&gt;
&lt;td&gt;속도 변화량 평균&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery_Current_diff_mean&lt;/td&gt;
&lt;td&gt;전류 변화량 평균&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 단순 값 자체보다 &lt;b&gt;변동성(Variance)&lt;/b&gt; 이 주행거리와 밀접한 관계를 보였다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;데이터에서 발견한 흥미로운 사실&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TripA와 TripB를 비교하는 과정에서 흥미로운 패턴을 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저온 환경에서 난방 사용량이 크게 증가하면서 배터리 소모 속도가 빨라지는 현상이 나타난 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석 결과,&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;외기온도 감소
&amp;darr;
난방 전력 증가
&amp;darr;
배터리 소비 증가
&amp;darr;
SoC 감소 가속
&amp;darr;
주행거리 감소
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 흐름을 확인할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 외기온도와 난방 전력은 음의 상관관계를 보였으며, 추운 환경에서 전기차 주행거리가 감소하는 이유를 데이터로 확인할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;머신러닝 모델 비교&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본격적으로 여러 모델을 비교해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델R&amp;sup2;RMSE&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CatBoost&lt;/td&gt;
&lt;td&gt;0.922&lt;/td&gt;
&lt;td&gt;4.25km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XGBoost&lt;/td&gt;
&lt;td&gt;0.905&lt;/td&gt;
&lt;td&gt;4.72km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RandomForest&lt;/td&gt;
&lt;td&gt;0.873&lt;/td&gt;
&lt;td&gt;5.45km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LightGBM&lt;/td&gt;
&lt;td&gt;0.674&lt;/td&gt;
&lt;td&gt;8.71km&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 CatBoost의 압승이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 데이터 수가 70개로 많지 않은 상황에서도 안정적인 성능을 보여주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 LightGBM은 충분한 데이터를 확보하지 못해 성능이 크게 떨어졌다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;성능보다 더 중요했던 문제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델링 과정에서 예상치 못한 고민이 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 일부 변수들이 주행거리와 지나치게 높은 상관관계를 보인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 변수는 다음과 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수상관계수&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SoC_lag1_std&lt;/td&gt;
&lt;td&gt;0.897&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;0.840&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOC_Consumed&lt;/td&gt;
&lt;td&gt;0.667&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Battery_State_of_Charge_End&lt;/td&gt;
&lt;td&gt;0.379&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 데이터 누수(Data Leakage)를 의심했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 자세히 살펴보니 문제의 본질은 조금 달랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 변수들은 미래 정보를 포함한 누수 변수라기보다는, 주행거리와 직접적으로 연결된 &lt;b&gt;정답 대리변수(Proxy Variable)&lt;/b&gt; 에 가까웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;주행시간(Duration) &amp;times; 평균속도
&amp;asymp; 주행거리(Distance)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 관계가 성립한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 모델이 진짜 패턴을 학습한 것이 아니라 정답을 우회적으로 계산했을 가능성이 있는 것이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;직접 검증해봤다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 해당 변수들을 제거한 뒤 다시 교차검증을 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 다음과 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건R&amp;sup2;RMSE&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;전체 변수 사용&lt;/td&gt;
&lt;td&gt;0.874&lt;/td&gt;
&lt;td&gt;3.30km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;대리변수 제거&lt;/td&gt;
&lt;td&gt;0.675&lt;/td&gt;
&lt;td&gt;5.53km&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R&amp;sup2;는 약 20% 감소했고 RMSE는 크게 증가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 해당 변수들이 실제로 매우 강력한 설명력을 가지고 있다는 의미였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이 결과는 동시에 모델이 일부 대리변수에 의존하고 있다는 사실도 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본 모델은 실시간 예측 모델이 아니라 &lt;b&gt;트립 종료 후 사후 분석(Post-Trip Analysis) 모델&lt;/b&gt; 로 해석하는 것이 적절하다고 판단했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;Optuna 튜닝&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 향상을 위해 Optuna를 이용한 하이퍼파라미터 최적화를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30회 탐색 결과,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RMSE 5.37km&lt;/li&gt;
&lt;li&gt;&amp;rarr; 4.50km&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;까지 개선되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Trial 20 이후부터는 성능 향상이 거의 발생하지 않아 수렴한 것으로 판단했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;최종 모델 성능&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 모델은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5-Fold Cross Validation &amp;times; 10회 반복&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방식으로 평가하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표결과&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;평균 R&amp;sup2;&lt;/td&gt;
&lt;td&gt;0.941&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;평균 RMSE&lt;/td&gt;
&lt;td&gt;3.08km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RMSE 표준편차&lt;/td&gt;
&lt;td&gt;1.55km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최소 RMSE&lt;/td&gt;
&lt;td&gt;1.59km&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;70개의 트립 데이터만으로도 상당히 높은 예측 성능을 확보할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;어떤 변수가 가장 중요했을까?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature Importance 분석 결과는 다음과 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순위변수중요도&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Duration&lt;/td&gt;
&lt;td&gt;25.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;SoC_lag1_std&lt;/td&gt;
&lt;td&gt;24.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Elevation_MA3_std&lt;/td&gt;
&lt;td&gt;17.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;SOC_Consumed&lt;/td&gt;
&lt;td&gt;16.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흥미로운 점은 단순 속도보다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주행시간&lt;/li&gt;
&lt;li&gt;배터리 변동성&lt;/li&gt;
&lt;li&gt;고도 변화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 더 중요한 변수로 나타났다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 언덕이 많은 구간에서는 추가적인 에너지 소비가 발생했고, 이는 주행거리 감소에 직접적인 영향을 주었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;프로젝트를 통해 배운 점&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트에서 얻은 가장 큰 교훈은 단 하나였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높은 성능 수치 자체는 그리 중요하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 것은&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;왜 그런 성능이 나왔는가?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 설명할 수 있는지 여부다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 R&amp;sup2; 0.941이라는 결과도 대리변수 검증을 수행하지 않았다면 단순히 좋은 숫자에 불과했을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 변수 제거 실험을 통해 모델의 한계를 확인했고, 어떤 상황에서 사용할 수 있는 모델인지 명확하게 정의할 수 있었다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;마무리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기차의 항속거리는 단순히 배터리 용량만으로 결정되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주행 패턴, 고도 변화, 외기온도, HVAC 사용량 등 수많은 요소가 복합적으로 작용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트를 통해 실제 주행 데이터만으로도 이러한 관계를 정량적으로 분석할 수 있었으며, 머신러닝을 활용해 상당히 높은 수준의 주행거리 예측이 가능하다는 점을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 현재 모델은 사후 분석 중심의 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후에는 출발 전 확인 가능한 정보만 사용하여 실시간 항속거리 예측 모델로 확장해 볼 계획이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터는 단순히 숫자를 만드는 도구가 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자 뒤에 숨어 있는 원인을 이해하고 설명하는 과정이야말로 데이터 분석의 진짜 가치라고 생각한다.&lt;/p&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/56</guid>
      <comments>https://lshxkwh.tistory.com/56#entry56comment</comments>
      <pubDate>Wed, 10 Jun 2026 20:07:02 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 63일차 )</title>
      <link>https://lshxkwh.tistory.com/55</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;오늘 한 것 &amp;mdash; EV 데이터 분석 프로젝트 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. K-Fold 기반 Optuna 진행 중&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Optuna는 단일 train/test split 기준으로 파라미터를 찾았는데, 특정 트립에 과적합됐을 가능성이 있었다. 이를 보완하기 위해 각 trial마다 5-Fold 평균 RMSE로 평가하는 K-Fold 기반 Optuna를 진행 중이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 이동평균 피처 추가 시도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SoC, Battery_Power, Velocity, Total_HVAC 4개 변수에 60초 rolling mean을 추가했다. 기존 최적 파라미터로 학습했을 때 RMSE가 6.50 &amp;rarr; 7.17로 오히려 나빠졌고, Optuna 재튜닝 후에도 44개 피처 단독보다 성능이 낮아 이동평균 추가는 포기했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 슬라이드 그래프 빨간 계열 스타일로 통일&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발표 슬라이드의 전체 그래프 색상을 빨간 계열로 통일했다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;subunit&quot; style=&quot;color: #14181f;&quot;&gt;&lt;code&gt;Train 데이터: #FFAAAA (연한 빨간)
Test / 강조:  #C0392B (진한 빨간)
배경:          white
그리드:        #DDDDDD 점선&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경한 그래프 목록이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CatBoost 예측값 vs 실제값 scatter&lt;/li&gt;
&lt;li&gt;Baseline vs Top20 피처 비교 막대그래프&lt;/li&gt;
&lt;li&gt;예측 오차 분포 히스토그램&lt;/li&gt;
&lt;li&gt;Fold별 RMSE 막대그래프 (최대값=진빨, 나머지=연빨)&lt;/li&gt;
&lt;li&gt;Baseline 4개 모델 성능 비교 (모델별 색상 구분)&lt;/li&gt;
&lt;li&gt;Window 크기별 이동평균 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Window 크기 선택 근거 슬라이드 제작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MA3 채택 이유를 Bias-Variance Trade-off 관점으로 정리한 슬라이드를 만들었다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사후 검증 근거로 Elevation_MA3_std가 변수 중요도 3위(17.6%)에 올라 MA3 선택이 옳았음을 확인했다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 도메인 분석 슬라이드 3장 제작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온도가 주행거리에 미치는 영향을 TripA(여름) vs TripB(겨울) 데이터로 직접 시각화하고 논문 근거(Iora &amp;amp; Tribioli, 2019)를 함께 넣었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배터리 온도 vs 주행거리에서는 TripB가 0~10&amp;deg;C 저온 구간에 몰려있고 대부분 10~20km 수준이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외기온 vs 주행거리에서는 10&amp;deg;C가 분기점으로 그 이하에서 주행거리가 급감하는 패턴이 확인됐다. 논문에 따르면 0&amp;deg;C에서 최대 25% 감소한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난방 전력 vs 주행거리에서는 1kW 이상 난방 시 대부분 20km 이하였고, 난방이 직접적으로 주행거리를 깎아먹는 구조가 확인됐다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 회생제동 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TripA vs TripB 배터리 전류 박스플롯을 통해 겨울철 회생제동 특성을 분석했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배터리 전류 변동성은 TripB(겨울) 중앙값(41A)이 TripA(여름, 30A)보다 높았는데, 최대 6kW 난방 부하가 전류 변동을 증폭시키기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대 회생제동 전류는 TripA 중앙값(118A)이 TripB(105A)보다 높았다. 저온에서 배터리 보호 로직이 개입해 유입 전류가 억제되기 때문이다.&lt;/p&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/55</guid>
      <comments>https://lshxkwh.tistory.com/55#entry55comment</comments>
      <pubDate>Tue, 9 Jun 2026 20:17:39 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 62일차 )</title>
      <link>https://lshxkwh.tistory.com/54</link>
      <description>&lt;h1 data-end=&quot;38&quot; data-start=&quot;0&quot;&gt;BMW i3는 왜 사라졌을까?&lt;/h1&gt;
&lt;p data-end=&quot;114&quot; data-start=&quot;40&quot; data-ke-size=&quot;size16&quot;&gt;전기차 시장이 본격적으로 성장하기 전, BMW는 누구보다 빠르게 미래를 준비하고 있었다. 그 중심에 있었던 차가 바로 BMW i3다.&lt;/p&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;116&quot; data-ke-size=&quot;size16&quot;&gt;2013년 등장한 BMW i3는 탄소섬유 차체, 친환경 소재, 전용 전기차 플랫폼 등 당시로서는 파격적인 기술을 적용한 혁신적인 모델이었다. 하지만 2022년, i3는 조용히 단종됐다.&lt;/p&gt;
&lt;p data-end=&quot;252&quot; data-start=&quot;221&quot; data-ke-size=&quot;size16&quot;&gt;선구자였던 BMW i3는 왜 시장에서 살아남지 못했을까?&lt;/p&gt;
&lt;hr data-end=&quot;257&quot; data-start=&quot;254&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;276&quot; data-start=&quot;259&quot; data-ke-size=&quot;size26&quot;&gt;BMW i3는 어떤 차였나&lt;/h2&gt;
&lt;p data-end=&quot;359&quot; data-start=&quot;278&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;BMW i3&lt;/span&gt;&lt;/span&gt;는 BMW가 전기차 전용 브랜드인 BMW i를 통해 처음 선보인 양산 전기차다.&lt;/p&gt;
&lt;p data-end=&quot;441&quot; data-start=&quot;361&quot; data-ke-size=&quot;size16&quot;&gt;당시 대부분의 완성차 업체들이 내연기관 차량을 기반으로 전기차를 개발하던 것과 달리, BMW는 처음부터 전기차를 위해 별도의 플랫폼을 설계했다.&lt;/p&gt;
&lt;p data-end=&quot;477&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;특히 가장 큰 특징은 탄소섬유강화플라스틱(CFRP) 차체였다.&lt;/p&gt;
&lt;h3 data-end=&quot;492&quot; data-start=&quot;479&quot; data-ke-size=&quot;size23&quot;&gt;i3의 혁신 요소&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;563&quot; data-start=&quot;494&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;506&quot; data-start=&quot;494&quot;&gt;CFRP 차체 적용&lt;/li&gt;
&lt;li data-end=&quot;519&quot; data-start=&quot;507&quot;&gt;전용 전기차 플랫폼&lt;/li&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;520&quot;&gt;재활용 소재 중심 인테리어&lt;/li&gt;
&lt;li data-end=&quot;549&quot; data-start=&quot;537&quot;&gt;후륜구동 기반 설계&lt;/li&gt;
&lt;li data-end=&quot;563&quot; data-start=&quot;550&quot;&gt;도심형 전기차 콘셉트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;596&quot; data-start=&quot;565&quot; data-ke-size=&quot;size16&quot;&gt;2013년 기준으로 보면 상당히 미래지향적인 차량이었다.&lt;/p&gt;
&lt;hr data-end=&quot;601&quot; data-start=&quot;598&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;619&quot; data-start=&quot;603&quot; data-ke-size=&quot;size26&quot;&gt;숫자로 보는 BMW i3&lt;/h2&gt;
&lt;p data-end=&quot;670&quot; data-start=&quot;621&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3는 단종될 때까지 전 세계적으로 약 25만 대 수준의 누적 판매량을 기록했다.&lt;/p&gt;
&lt;p data-end=&quot;725&quot; data-start=&quot;672&quot; data-ke-size=&quot;size16&quot;&gt;전기차 시장이 아직 형성되지 않았던 시기에 출시된 모델이라는 점을 고려하면 나쁜 성적은 아니다.&lt;/p&gt;
&lt;p data-end=&quot;760&quot; data-start=&quot;727&quot; data-ke-size=&quot;size16&quot;&gt;하지만 시간이 지나면서 시장 환경은 급격히 변하기 시작했다.&lt;/p&gt;
&lt;hr data-end=&quot;765&quot; data-start=&quot;762&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;786&quot; data-start=&quot;767&quot; data-ke-size=&quot;size26&quot;&gt;BMW i3 단종의 진짜 이유&lt;/h2&gt;
&lt;h3 data-end=&quot;813&quot; data-start=&quot;788&quot; data-ke-size=&quot;size23&quot;&gt;1. 항속거리 경쟁에서 밀리기 시작했다&lt;/h3&gt;
&lt;p data-end=&quot;842&quot; data-start=&quot;815&quot; data-ke-size=&quot;size16&quot;&gt;초기 BMW i3는 22kWh 배터리를 탑재했다.&lt;/p&gt;
&lt;p data-end=&quot;875&quot; data-start=&quot;844&quot; data-ke-size=&quot;size16&quot;&gt;실제 주행 가능 거리는 약 130~160km 수준이었다.&lt;/p&gt;
&lt;p data-end=&quot;918&quot; data-start=&quot;877&quot; data-ke-size=&quot;size16&quot;&gt;출시 당시에는 충분히 경쟁력이 있었지만, 시간이 지나면서 문제가 발생했다.&lt;/p&gt;
&lt;p data-end=&quot;969&quot; data-start=&quot;920&quot; data-ke-size=&quot;size16&quot;&gt;소비자들이 전기차를 선택할 때 가장 중요하게 생각하는 요소는 결국 주행거리였기 때문이다.&lt;/p&gt;
&lt;p data-end=&quot;1005&quot; data-start=&quot;971&quot; data-ke-size=&quot;size16&quot;&gt;2018년 이후 경쟁 모델들은 빠르게 항속거리를 늘려 나갔다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;모델배터리실주행 거리
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1307&quot; data-start=&quot;1007&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1307&quot; data-start=&quot;1058&quot;&gt;
&lt;tr data-end=&quot;1088&quot; data-start=&quot;1058&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1067&quot; data-start=&quot;1058&quot;&gt;BMW i3&lt;/td&gt;
&lt;td data-end=&quot;1075&quot; data-start=&quot;1067&quot; data-col-size=&quot;sm&quot;&gt;22kWh&lt;/td&gt;
&lt;td data-end=&quot;1088&quot; data-start=&quot;1075&quot; data-col-size=&quot;sm&quot;&gt;130~160km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1120&quot; data-start=&quot;1089&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1099&quot; data-start=&quot;1089&quot;&gt;BMW i3s&lt;/td&gt;
&lt;td data-end=&quot;1107&quot; data-start=&quot;1099&quot; data-col-size=&quot;sm&quot;&gt;42kWh&lt;/td&gt;
&lt;td data-end=&quot;1120&quot; data-start=&quot;1107&quot; data-col-size=&quot;sm&quot;&gt;260~310km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1183&quot; data-start=&quot;1121&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1161&quot; data-start=&quot;1121&quot;&gt;&lt;span&gt;&lt;span&gt;Tesla Model 3&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1171&quot; data-start=&quot;1161&quot; data-col-size=&quot;sm&quot;&gt;약 54kWh&lt;/td&gt;
&lt;td data-end=&quot;1183&quot; data-start=&quot;1171&quot; data-col-size=&quot;sm&quot;&gt;400km 이상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1245&quot; data-start=&quot;1184&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1224&quot; data-start=&quot;1184&quot;&gt;&lt;span&gt;&lt;span&gt;Nissan Leaf&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1232&quot; data-start=&quot;1224&quot; data-col-size=&quot;sm&quot;&gt;40kWh&lt;/td&gt;
&lt;td data-end=&quot;1245&quot; data-start=&quot;1232&quot; data-col-size=&quot;sm&quot;&gt;240~270km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1307&quot; data-start=&quot;1246&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1286&quot; data-start=&quot;1246&quot;&gt;&lt;span&gt;&lt;span&gt;Hyundai Ioniq Electric&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1294&quot; data-start=&quot;1286&quot; data-col-size=&quot;sm&quot;&gt;28kWh&lt;/td&gt;
&lt;td data-end=&quot;1307&quot; data-start=&quot;1294&quot; data-col-size=&quot;sm&quot;&gt;200~280km&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1358&quot; data-start=&quot;1309&quot; data-ke-size=&quot;size16&quot;&gt;BMW는 배터리 용량을 늘린 i3s를 출시했지만 이미 경쟁사들이 한발 앞서 나간 뒤였다.&lt;/p&gt;
&lt;hr data-end=&quot;1363&quot; data-start=&quot;1360&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1394&quot; data-start=&quot;1365&quot; data-ke-size=&quot;size23&quot;&gt;2. Tesla가 전기차 시장의 기준을 바꿨다&lt;/h3&gt;
&lt;p data-end=&quot;1427&quot; data-start=&quot;1396&quot; data-ke-size=&quot;size16&quot;&gt;2017~2018년은 전기차 시장의 중요한 전환점이었다.&lt;/p&gt;
&lt;p data-end=&quot;1506&quot; data-start=&quot;1429&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;Tesla Model 3&lt;/span&gt;&lt;/span&gt;가 본격적으로 판매되기 시작하면서 소비자들의 기대 수준 자체가 바뀌었다.&lt;/p&gt;
&lt;p data-end=&quot;1512&quot; data-start=&quot;1508&quot; data-ke-size=&quot;size16&quot;&gt;기존에는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1525&quot; data-start=&quot;1514&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1525&quot; data-start=&quot;1514&quot;&gt;전기차면 충분하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1531&quot; data-start=&quot;1527&quot; data-ke-size=&quot;size16&quot;&gt;였다면,&lt;/p&gt;
&lt;p data-end=&quot;1537&quot; data-start=&quot;1533&quot; data-ke-size=&quot;size16&quot;&gt;이후에는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1581&quot; data-start=&quot;1539&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1554&quot; data-start=&quot;1539&quot;&gt;멀리 갈 수 있어야 한다&lt;/li&gt;
&lt;li data-end=&quot;1568&quot; data-start=&quot;1555&quot;&gt;빠르게 충전돼야 한다&lt;/li&gt;
&lt;li data-end=&quot;1581&quot; data-start=&quot;1569&quot;&gt;성능도 좋아야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1594&quot; data-start=&quot;1583&quot; data-ke-size=&quot;size16&quot;&gt;라는 기준이 생겼다.&lt;/p&gt;
&lt;p data-end=&quot;1651&quot; data-start=&quot;1596&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3는 도심형 전기차라는 콘셉트에 충실했지만, 시장은 이미 장거리 전기차를 원하기 시작했다.&lt;/p&gt;
&lt;hr data-end=&quot;1656&quot; data-start=&quot;1653&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1686&quot; data-start=&quot;1658&quot; data-ke-size=&quot;size23&quot;&gt;3. 가장 큰 혁신이 가장 큰 약점이 되었다&lt;/h3&gt;
&lt;p data-end=&quot;1710&quot; data-start=&quot;1688&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3의 상징은 CFRP 차체였다.&lt;/p&gt;
&lt;p data-end=&quot;1732&quot; data-start=&quot;1712&quot; data-ke-size=&quot;size16&quot;&gt;탄소섬유는 매우 가볍고 강성이 높다.&lt;/p&gt;
&lt;p data-end=&quot;1773&quot; data-start=&quot;1734&quot; data-ke-size=&quot;size16&quot;&gt;덕분에 i3는 배터리 무게를 상쇄하며 뛰어난 효율을 확보할 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;1789&quot; data-start=&quot;1775&quot; data-ke-size=&quot;size16&quot;&gt;하지만 문제는 비용이었다.&lt;/p&gt;
&lt;p data-end=&quot;1828&quot; data-start=&quot;1791&quot; data-ke-size=&quot;size16&quot;&gt;CFRP는 생산 과정이 복잡하고 가격이 비싸 대량 생산에 불리했다.&lt;/p&gt;
&lt;p data-end=&quot;1832&quot; data-start=&quot;1830&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;blockquote data-end=&quot;1868&quot; data-start=&quot;1834&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1868&quot; data-start=&quot;1836&quot; data-ke-size=&quot;size16&quot;&gt;기술적으로는 훌륭했지만 사업적으로는 효율이 낮은 구조였다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1915&quot; data-start=&quot;1870&quot; data-ke-size=&quot;size16&quot;&gt;결국 BMW는 이후 출시한 전기차에서 CFRP 중심 전략을 사실상 포기하게 된다.&lt;/p&gt;
&lt;hr data-end=&quot;1920&quot; data-start=&quot;1917&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1939&quot; data-start=&quot;1922&quot; data-ke-size=&quot;size23&quot;&gt;4. BMW의 전략 변화&lt;/h3&gt;
&lt;p data-end=&quot;1975&quot; data-start=&quot;1941&quot; data-ke-size=&quot;size16&quot;&gt;2020년대 들어 BMW는 전기차 전략을 재정비하기 시작했다.&lt;/p&gt;
&lt;p data-end=&quot;1985&quot; data-start=&quot;1977&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 모델은&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2106&quot; data-start=&quot;1987&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2026&quot; data-start=&quot;1987&quot;&gt;&lt;span&gt;&lt;span&gt;BMW i4&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2066&quot; data-start=&quot;2027&quot;&gt;&lt;span&gt;&lt;span&gt;BMW iX&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2106&quot; data-start=&quot;2067&quot;&gt;&lt;span&gt;&lt;span&gt;BMW iX3&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2112&quot; data-start=&quot;2108&quot; data-ke-size=&quot;size16&quot;&gt;등이다.&lt;/p&gt;
&lt;p data-end=&quot;2158&quot; data-start=&quot;2114&quot; data-ke-size=&quot;size16&quot;&gt;BMW는 수익성이 높은 프리미엄 세단과 SUV 중심으로 전동화 전략을 전환했다.&lt;/p&gt;
&lt;p data-end=&quot;2201&quot; data-start=&quot;2160&quot; data-ke-size=&quot;size16&quot;&gt;반면 i3는 소형 해치백 시장에 속해 있었고, 상대적으로 수익성이 낮았다.&lt;/p&gt;
&lt;p data-end=&quot;2241&quot; data-start=&quot;2203&quot; data-ke-size=&quot;size16&quot;&gt;기업 입장에서는 미래 투자 방향을 바꾸는 것이 자연스러운 선택이었다.&lt;/p&gt;
&lt;hr data-end=&quot;2246&quot; data-start=&quot;2243&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2279&quot; data-start=&quot;2248&quot; data-ke-size=&quot;size23&quot;&gt;5. 시장이 원한 것은 소형차가 아니라 SUV였다&lt;/h3&gt;
&lt;p data-end=&quot;2326&quot; data-start=&quot;2281&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3가 등장했을 때만 해도 많은 사람들이 도심형 전기차의 성장을 예상했다.&lt;/p&gt;
&lt;p data-end=&quot;2355&quot; data-start=&quot;2328&quot; data-ke-size=&quot;size16&quot;&gt;하지만 실제 시장은 전혀 다른 방향으로 움직였다.&lt;/p&gt;
&lt;p data-end=&quot;2362&quot; data-start=&quot;2357&quot; data-ke-size=&quot;size16&quot;&gt;소비자들은&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2391&quot; data-start=&quot;2364&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2373&quot; data-start=&quot;2364&quot;&gt;더 넓은 공간&lt;/li&gt;
&lt;li data-end=&quot;2382&quot; data-start=&quot;2374&quot;&gt;긴 항속거리&lt;/li&gt;
&lt;li data-end=&quot;2391&quot; data-start=&quot;2383&quot;&gt;높은 활용성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2399&quot; data-start=&quot;2393&quot; data-ke-size=&quot;size16&quot;&gt;을 원했고,&lt;/p&gt;
&lt;p data-end=&quot;2425&quot; data-start=&quot;2401&quot; data-ke-size=&quot;size16&quot;&gt;결국 SUV 중심의 전기차 시장이 형성됐다.&lt;/p&gt;
&lt;p data-end=&quot;2480&quot; data-start=&quot;2427&quot; data-ke-size=&quot;size16&quot;&gt;전기차 충전 인프라가 확대될수록 &quot;도심에서만 타는 전기차&quot;라는 개념도 점차 설득력을 잃게 됐다.&lt;/p&gt;
&lt;hr data-end=&quot;2485&quot; data-start=&quot;2482&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2507&quot; data-start=&quot;2487&quot; data-ke-size=&quot;size26&quot;&gt;BMW i3는 실패한 차였을까?&lt;/h2&gt;
&lt;p data-end=&quot;2521&quot; data-start=&quot;2509&quot; data-ke-size=&quot;size16&quot;&gt;그렇게 보기는 어렵다.&lt;/p&gt;
&lt;p data-end=&quot;2579&quot; data-start=&quot;2523&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3는 상업적으로 폭발적인 성공을 거두지는 못했지만, 기술적으로는 매우 의미 있는 모델이었다.&lt;/p&gt;
&lt;p data-end=&quot;2636&quot; data-start=&quot;2581&quot; data-ke-size=&quot;size16&quot;&gt;오늘날 BMW 전기차에 적용되는 많은 기술과 노하우는 i3 개발 과정에서 축적된 경험에서 시작됐다.&lt;/p&gt;
&lt;p data-end=&quot;2677&quot; data-start=&quot;2638&quot; data-ke-size=&quot;size16&quot;&gt;실제로 i3는 BMW가 전동화 시대를 준비하는 실험실 역할을 수행했다.&lt;/p&gt;
&lt;p data-end=&quot;2681&quot; data-start=&quot;2679&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;blockquote data-end=&quot;2716&quot; data-start=&quot;2683&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2716&quot; data-start=&quot;2685&quot; data-ke-size=&quot;size16&quot;&gt;i3는 실패한 차라기보다 BMW의 미래를 위한 투자였다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;2721&quot; data-start=&quot;2718&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2748&quot; data-start=&quot;2723&quot; data-ke-size=&quot;size26&quot;&gt;시사점: 좋은 차와 성공하는 차는 다르다&lt;/h2&gt;
&lt;p data-end=&quot;2776&quot; data-start=&quot;2750&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3의 이야기가 보여주는 것은 단순하다.&lt;/p&gt;
&lt;p data-end=&quot;2819&quot; data-start=&quot;2778&quot; data-ke-size=&quot;size16&quot;&gt;좋은 차를 만드는 것과 시장에서 성공하는 것은 서로 다른 문제라는 점이다.&lt;/p&gt;
&lt;p data-end=&quot;2846&quot; data-start=&quot;2821&quot; data-ke-size=&quot;size16&quot;&gt;BMW i3는 분명 시대를 앞서간 전기차였다.&lt;/p&gt;
&lt;p data-end=&quot;2892&quot; data-start=&quot;2848&quot; data-ke-size=&quot;size16&quot;&gt;그러나 소비자가 원하는 방향과 시장이 움직이는 속도를 완벽하게 맞추지는 못했다.&lt;/p&gt;
&lt;p data-end=&quot;2987&quot; data-start=&quot;2894&quot; data-ke-size=&quot;size16&quot;&gt;그 결과 i3는 역사 속으로 사라졌지만, 그 과정에서 BMW는 전동화 기술과 경험을 축적했고 이후 i4, iX, iX3로 이어지는 새로운 전기차 시대를 열 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;3009&quot; data-start=&quot;2989&quot; data-ke-size=&quot;size16&quot;&gt;결국 BMW i3는 실패작이 아니라,&lt;/p&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;3053&quot; data-start=&quot;3011&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전기차 시대를 향한 가장 과감한 실험 중 하나였다고 평가할 수 있다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/54</guid>
      <comments>https://lshxkwh.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 8 Jun 2026 20:29:35 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] QA/QC_5기 ( 61일차 )</title>
      <link>https://lshxkwh.tistory.com/53</link>
      <description>&lt;h1 data-end=&quot;156&quot; data-start=&quot;102&quot; data-section-id=&quot;f8893k&quot;&gt;EV 주행거리 예측 모델 개발기: CatBoost + Optuna로 RMSE 3.27km 달성&lt;/h1&gt;
&lt;h2 data-end=&quot;178&quot; data-start=&quot;158&quot; data-section-id=&quot;1gkxeiw&quot; data-ke-size=&quot;size26&quot;&gt;1. Baseline 모델 구축&lt;/h2&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;먼저 아무런 튜닝 없이 대표적인 트리 기반 회귀 모델 4개를 비교했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;268&quot; data-start=&quot;221&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;236&quot; data-start=&quot;221&quot; data-section-id=&quot;dywkbu&quot;&gt;Random Forest&lt;/li&gt;
&lt;li data-end=&quot;247&quot; data-start=&quot;237&quot; data-section-id=&quot;1ltq1jy&quot;&gt;LightGBM&lt;/li&gt;
&lt;li data-end=&quot;258&quot; data-start=&quot;248&quot; data-section-id=&quot;10ezuxn&quot;&gt;CatBoost&lt;/li&gt;
&lt;li data-end=&quot;268&quot; data-start=&quot;259&quot; data-section-id=&quot;uh893m&quot;&gt;XGBoost&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;334&quot; data-start=&quot;270&quot; data-ke-size=&quot;size16&quot;&gt;타겟 변수는 &lt;b&gt;Distance(주행거리, km)&lt;/b&gt; 로 설정하고, 나머지 변수들을 모두 입력 특성으로 사용하였다.&lt;/p&gt;
&lt;h3 data-end=&quot;352&quot; data-start=&quot;336&quot; data-section-id=&quot;ejl5m&quot; data-ke-size=&quot;size23&quot;&gt;B 데이터셋 단독 결과&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;모델R&amp;sup2;RMSE
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;484&quot; data-start=&quot;354&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;484&quot; data-start=&quot;402&quot;&gt;
&lt;tr data-end=&quot;432&quot; data-start=&quot;402&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;413&quot; data-start=&quot;402&quot;&gt;CatBoost&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;421&quot; data-start=&quot;413&quot;&gt;0.819&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;432&quot; data-start=&quot;421&quot;&gt;6.50 km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;462&quot; data-start=&quot;433&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;449&quot; data-start=&quot;433&quot;&gt;Random Forest&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;457&quot; data-start=&quot;449&quot;&gt;0.799&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;462&quot; data-start=&quot;457&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;484&quot; data-start=&quot;463&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;474&quot; data-start=&quot;463&quot;&gt;LightGBM&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;479&quot; data-start=&quot;474&quot;&gt;낮음&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;484&quot; data-start=&quot;479&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;504&quot; data-start=&quot;486&quot; data-section-id=&quot;qgrcap&quot; data-ke-size=&quot;size23&quot;&gt;A+B 통합 데이터셋 결과&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;모델R&amp;sup2;RMSE
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;681&quot; data-start=&quot;506&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;681&quot; data-start=&quot;554&quot;&gt;
&lt;tr data-end=&quot;584&quot; data-start=&quot;554&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;565&quot; data-start=&quot;554&quot;&gt;CatBoost&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;573&quot; data-start=&quot;565&quot;&gt;0.922&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;584&quot; data-start=&quot;573&quot;&gt;4.25 km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;614&quot; data-start=&quot;585&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;595&quot; data-start=&quot;585&quot;&gt;XGBoost&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;603&quot; data-start=&quot;595&quot;&gt;0.905&lt;/td&gt;
&lt;td data-end=&quot;614&quot; data-start=&quot;603&quot; data-col-size=&quot;sm&quot;&gt;4.72 km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;650&quot; data-start=&quot;615&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;631&quot; data-start=&quot;615&quot;&gt;Random Forest&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;639&quot; data-start=&quot;631&quot;&gt;0.873&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;650&quot; data-start=&quot;639&quot;&gt;5.45 km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;681&quot; data-start=&quot;651&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;662&quot; data-start=&quot;651&quot;&gt;LightGBM&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;670&quot; data-start=&quot;662&quot;&gt;0.674&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;681&quot; data-start=&quot;670&quot;&gt;8.71 km&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;803&quot; data-start=&quot;683&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 통합하자 모든 모델의 성능이 향상되었다. 특히 CatBoost가 가장 우수한 결과를 보였다. 반면 LightGBM은 데이터 수가 약 60~70개 수준으로 적어 충분한 학습이 이루어지지 못한 것으로 판단된다.&lt;/p&gt;
&lt;hr data-end=&quot;808&quot; data-start=&quot;805&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;843&quot; data-start=&quot;810&quot; data-section-id=&quot;k0ais0&quot; data-ke-size=&quot;size26&quot;&gt;2. Feature Importance 기반 변수 정리&lt;/h2&gt;
&lt;p data-end=&quot;899&quot; data-start=&quot;845&quot; data-ke-size=&quot;size16&quot;&gt;Baseline CatBoost 모델을 학습한 후 Feature Importance를 분석하였다.&lt;/p&gt;
&lt;p data-end=&quot;965&quot; data-start=&quot;901&quot; data-ke-size=&quot;size16&quot;&gt;상위 변수들은 주행거리 예측에 강하게 기여했지만, 하위 변수들은 대부분 날씨 및 경로 관련 원-핫 인코딩 변수였다.&lt;/p&gt;
&lt;p data-end=&quot;973&quot; data-start=&quot;967&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1016&quot; data-start=&quot;975&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;990&quot; data-start=&quot;975&quot; data-section-id=&quot;1nbyy2q&quot;&gt;Weather_rainy&lt;/li&gt;
&lt;li data-end=&quot;1016&quot; data-start=&quot;991&quot; data-section-id=&quot;1oplrx4&quot;&gt;Route_Area_Munich_South&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1037&quot; data-start=&quot;1018&quot; data-ke-size=&quot;size16&quot;&gt;등은 중요도가 매우 낮게 나타났다.&lt;/p&gt;
&lt;p data-end=&quot;1130&quot; data-start=&quot;1039&quot; data-ke-size=&quot;size16&quot;&gt;중요도 하위 10개 변수를 제거한 후 재학습을 수행했지만 성능 차이는 거의 없었다. 이를 통해 불필요한 변수를 줄여도 모델 성능에는 영향이 크지 않음을 확인하였다.&lt;/p&gt;
&lt;hr data-end=&quot;1135&quot; data-start=&quot;1132&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1164&quot; data-start=&quot;1137&quot; data-section-id=&quot;1ujs9q8&quot; data-ke-size=&quot;size26&quot;&gt;3. Optuna 기반 하이퍼파라미터 최적화&lt;/h2&gt;
&lt;p data-end=&quot;1208&quot; data-start=&quot;1166&quot; data-ke-size=&quot;size16&quot;&gt;각 모델에 대해 Optuna를 이용한 자동 하이퍼파라미터 탐색을 수행하였다.&lt;/p&gt;
&lt;h3 data-end=&quot;1222&quot; data-start=&quot;1210&quot; data-section-id=&quot;xa43g5&quot; data-ke-size=&quot;size23&quot;&gt;CatBoost&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1260&quot; data-start=&quot;1224&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1245&quot; data-start=&quot;1224&quot; data-section-id=&quot;16zkpc&quot;&gt;Objective: RMSE 최소화&lt;/li&gt;
&lt;li data-end=&quot;1260&quot; data-start=&quot;1246&quot; data-section-id=&quot;niclnr&quot;&gt;Trial 수: 30회&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1334&quot; data-start=&quot;1262&quot; data-ke-size=&quot;size16&quot;&gt;Optimization History를 확인한 결과 약 20회 이후부터 RMSE 개선 폭이 거의 사라지며 수렴하는 모습을 보였다.&lt;/p&gt;
&lt;p data-end=&quot;1341&quot; data-start=&quot;1336&quot; data-ke-size=&quot;size16&quot;&gt;튜닝 결과&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;RMSE
4.25 km
&amp;darr;
3.27 km&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1399&quot; data-start=&quot;1379&quot; data-ke-size=&quot;size16&quot;&gt;약 23%의 성능 향상이 이루어졌다.&lt;/p&gt;
&lt;p data-end=&quot;1417&quot; data-start=&quot;1401&quot; data-ke-size=&quot;size16&quot;&gt;최종 CatBoost 파라미터&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;iterations = 1250
depth = 3
learning_rate = 0.026&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1537&quot; data-start=&quot;1482&quot; data-ke-size=&quot;size16&quot;&gt;Random Forest와 XGBoost 역시 동일하게 Optuna를 적용하여 최적화를 수행하였다.&lt;/p&gt;
&lt;hr data-end=&quot;1542&quot; data-start=&quot;1539&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1572&quot; data-start=&quot;1544&quot; data-section-id=&quot;o8sxyi&quot; data-ke-size=&quot;size26&quot;&gt;4. 교차검증 (Repeated K-Fold)&lt;/h2&gt;
&lt;p data-end=&quot;1631&quot; data-start=&quot;1574&quot; data-ke-size=&quot;size16&quot;&gt;데이터 수가 많지 않기 때문에 단일 Train/Test Split만으로 성능을 평가하는 것은 위험하다.&lt;/p&gt;
&lt;p data-end=&quot;1643&quot; data-start=&quot;1633&quot; data-ke-size=&quot;size16&quot;&gt;이를 보완하기 위해&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;5-Fold &amp;times; 10 Repeats&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1707&quot; data-start=&quot;1678&quot; data-ke-size=&quot;size16&quot;&gt;총 50개의 Fold에 대해 반복 검증을 수행하였다.&lt;/p&gt;
&lt;h3 data-end=&quot;1723&quot; data-start=&quot;1709&quot; data-section-id=&quot;11vku4y&quot; data-ke-size=&quot;size23&quot;&gt;평균 RMSE 비교&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;모델평균 RMSE
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1822&quot; data-start=&quot;1725&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1822&quot; data-start=&quot;1762&quot;&gt;
&lt;tr data-end=&quot;1784&quot; data-start=&quot;1762&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1773&quot; data-start=&quot;1762&quot;&gt;CatBoost&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1784&quot; data-start=&quot;1773&quot;&gt;3.27 km&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1800&quot; data-start=&quot;1785&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1795&quot; data-start=&quot;1785&quot;&gt;XGBoost&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1800&quot; data-start=&quot;1795&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1822&quot; data-start=&quot;1801&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1817&quot; data-start=&quot;1801&quot;&gt;Random Forest&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1822&quot; data-start=&quot;1817&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1855&quot; data-start=&quot;1824&quot; data-ke-size=&quot;size16&quot;&gt;CatBoost가 가장 낮은 평균 RMSE를 기록하였다.&lt;/p&gt;
&lt;p data-end=&quot;1903&quot; data-start=&quot;1857&quot; data-ke-size=&quot;size16&quot;&gt;또한 Fold 간 편차도 상대적으로 작아 안정성이 높은 모델임을 확인할 수 있었다.&lt;/p&gt;
&lt;hr data-end=&quot;1908&quot; data-start=&quot;1905&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDveU0/dJMcahLrAW2/VBCqnovVlVWBinSIAepOV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDveU0/dJMcahLrAW2/VBCqnovVlVWBinSIAepOV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDveU0/dJMcahLrAW2/VBCqnovVlVWBinSIAepOV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDveU0%2FdJMcahLrAW2%2FVBCqnovVlVWBinSIAepOV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1390&quot; height=&quot;592&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;1929&quot; data-start=&quot;1910&quot; data-section-id=&quot;1w7c551&quot; data-ke-size=&quot;size26&quot;&gt;5. SHAP 기반 모델 해석&lt;/h2&gt;
&lt;p data-end=&quot;1965&quot; data-start=&quot;1931&quot; data-ke-size=&quot;size16&quot;&gt;최종 CatBoost 모델에 대해 SHAP 분석을 수행하였다.&lt;/p&gt;
&lt;h3 data-end=&quot;1989&quot; data-start=&quot;1967&quot; data-section-id=&quot;146hj77&quot; data-ke-size=&quot;size23&quot;&gt;SHAP Beeswarm Plot&lt;/h3&gt;
&lt;p data-end=&quot;2015&quot; data-start=&quot;1991&quot; data-ke-size=&quot;size16&quot;&gt;가장 큰 영향을 미친 변수는 다음과 같았다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2061&quot; data-start=&quot;2017&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2028&quot; data-start=&quot;2017&quot; data-section-id=&quot;1nl0dfo&quot;&gt;Duration&lt;/li&gt;
&lt;li data-end=&quot;2044&quot; data-start=&quot;2029&quot; data-section-id=&quot;1263kr5&quot;&gt;SOC_Consumed&lt;/li&gt;
&lt;li data-end=&quot;2061&quot; data-start=&quot;2045&quot; data-section-id=&quot;rbq9iv&quot;&gt;Velocity_mean&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;2131&quot; data-start=&quot;2063&quot; data-ke-size=&quot;size16&quot;&gt;특히 Duration은 SHAP 값 분포가 가장 넓게 나타났으며, 값이 증가할수록 예측 주행거리도 증가하는 경향을 보였다.&lt;/p&gt;
&lt;h3 data-end=&quot;2152&quot; data-start=&quot;2133&quot; data-section-id=&quot;1uwxttk&quot; data-ke-size=&quot;size23&quot;&gt;SHAP Importance&lt;/h3&gt;
&lt;p data-end=&quot;2159&quot; data-start=&quot;2154&quot; data-ke-size=&quot;size16&quot;&gt;상위 변수&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;Duration
SOC_Consumed
Velocity_mean&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2213&quot; data-start=&quot;2210&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2236&quot; data-start=&quot;2215&quot; data-section-id=&quot;1g5atps&quot; data-ke-size=&quot;size23&quot;&gt;Random Forest와 비교&lt;/h3&gt;
&lt;p data-end=&quot;2272&quot; data-start=&quot;2238&quot; data-ke-size=&quot;size16&quot;&gt;흥미로운 점은 모델마다 중요하게 보는 변수가 달랐다는 것이다.&lt;/p&gt;
&lt;p data-end=&quot;2282&quot; data-start=&quot;2274&quot; data-ke-size=&quot;size16&quot;&gt;CatBoost&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;속도
가속도
주행 패턴&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2316&quot; data-start=&quot;2310&quot; data-ke-size=&quot;size16&quot;&gt;위주로 판단&lt;/p&gt;
&lt;p data-end=&quot;2331&quot; data-start=&quot;2318&quot; data-ke-size=&quot;size16&quot;&gt;Random Forest&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;배터리 온도
HVAC 사용량&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2377&quot; data-start=&quot;2362&quot; data-ke-size=&quot;size16&quot;&gt;을 상대적으로 중요하게 평가&lt;/p&gt;
&lt;p data-end=&quot;2381&quot; data-start=&quot;2379&quot; data-ke-size=&quot;size16&quot;&gt;다만&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;Duration
SOC_Consumed&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2446&quot; data-start=&quot;2418&quot; data-ke-size=&quot;size16&quot;&gt;는 두 모델 모두 공통적으로 가장 중요한 변수였다.&lt;/p&gt;
&lt;hr data-end=&quot;2451&quot; data-start=&quot;2448&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2472&quot; data-start=&quot;2453&quot; data-section-id=&quot;z1is65&quot; data-ke-size=&quot;size26&quot;&gt;6. 실제값 vs 예측값 비교&lt;/h2&gt;
&lt;p data-end=&quot;2506&quot; data-start=&quot;2474&quot; data-ke-size=&quot;size16&quot;&gt;실제값과 예측값을 Scatter Plot으로 시각화하였다.&lt;/p&gt;
&lt;p data-end=&quot;2511&quot; data-start=&quot;2508&quot; data-ke-size=&quot;size16&quot;&gt;기준선&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;gml&quot;&gt;&lt;code&gt;y = x&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2554&quot; data-start=&quot;2532&quot; data-ke-size=&quot;size16&quot;&gt;에 가까울수록 예측이 정확함을 의미한다.&lt;/p&gt;
&lt;p data-end=&quot;2561&quot; data-start=&quot;2556&quot; data-ke-size=&quot;size16&quot;&gt;분석 결과&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2615&quot; data-start=&quot;2563&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2588&quot; data-start=&quot;2563&quot; data-section-id=&quot;1x38dfh&quot;&gt;단거리~중거리 구간에서는 매우 높은 정확도&lt;/li&gt;
&lt;li data-end=&quot;2615&quot; data-start=&quot;2589&quot; data-section-id=&quot;11dfvuu&quot;&gt;장거리(40km 이상) 구간에서는 오차 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2627&quot; data-start=&quot;2617&quot; data-ke-size=&quot;size16&quot;&gt;현상이 관찰되었다.&lt;/p&gt;
&lt;p data-end=&quot;2676&quot; data-start=&quot;2629&quot; data-ke-size=&quot;size16&quot;&gt;또한 Train과 Test의 성능 차이가 크지 않아 심각한 과적합은 확인되지 않았다.&lt;/p&gt;
&lt;hr data-end=&quot;2681&quot; data-start=&quot;2678&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2694&quot; data-start=&quot;2683&quot; data-section-id=&quot;kg1k1l&quot; data-ke-size=&quot;size26&quot;&gt;7. 잔차 분석&lt;/h2&gt;
&lt;p data-end=&quot;2698&quot; data-start=&quot;2696&quot; data-ke-size=&quot;size16&quot;&gt;잔차&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;Residual = Actual - Prediction&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2752&quot; data-start=&quot;2744&quot; data-ke-size=&quot;size16&quot;&gt;를 분석하였다.&lt;/p&gt;
&lt;h3 data-end=&quot;2763&quot; data-start=&quot;2754&quot; data-section-id=&quot;m8j9lm&quot; data-ke-size=&quot;size23&quot;&gt;히스토그램&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2786&quot; data-start=&quot;2765&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2775&quot; data-start=&quot;2765&quot; data-section-id=&quot;tlaz64&quot;&gt;0 근처에 집중&lt;/li&gt;
&lt;li data-end=&quot;2786&quot; data-start=&quot;2776&quot; data-section-id=&quot;cend0w&quot;&gt;좌우 대칭 형태&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2815&quot; data-start=&quot;2788&quot; data-ke-size=&quot;size16&quot;&gt;즉 특정 방향으로 편향된 예측은 나타나지 않았다.&lt;/p&gt;
&lt;h3 data-end=&quot;2830&quot; data-start=&quot;2817&quot; data-section-id=&quot;1919jsl&quot; data-ke-size=&quot;size23&quot;&gt;실제값 vs 잔차&lt;/h3&gt;
&lt;p data-end=&quot;2858&quot; data-start=&quot;2832&quot; data-ke-size=&quot;size16&quot;&gt;단거리 구간에서는 잔차가 안정적으로 분포하였다.&lt;/p&gt;
&lt;p data-end=&quot;2894&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;반면 장거리 구간에서는 잔차의 분산이 커지는 경향이 나타났다.&lt;/p&gt;
&lt;p data-end=&quot;2924&quot; data-start=&quot;2896&quot; data-ke-size=&quot;size16&quot;&gt;이는 장거리 트립 데이터 부족의 영향으로 판단된다.&lt;/p&gt;
&lt;hr data-end=&quot;2929&quot; data-start=&quot;2926&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2963&quot; data-start=&quot;2931&quot; data-section-id=&quot;1hzae9u&quot; data-ke-size=&quot;size26&quot;&gt;8. Best Fold vs Worst Fold 분석&lt;/h2&gt;
&lt;p data-end=&quot;2985&quot; data-start=&quot;2965&quot; data-ke-size=&quot;size16&quot;&gt;Repeated K-Fold 결과 중&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3022&quot; data-start=&quot;2987&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3004&quot; data-start=&quot;2987&quot; data-section-id=&quot;1oansw7&quot;&gt;가장 성능이 좋았던 Fold&lt;/li&gt;
&lt;li data-end=&quot;3022&quot; data-start=&quot;3005&quot; data-section-id=&quot;1x7ldy0&quot;&gt;가장 성능이 나빴던 Fold&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3032&quot; data-start=&quot;3024&quot; data-ke-size=&quot;size16&quot;&gt;를 비교하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;1965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L9Nmi/dJMcadoFl60/SlKDwU8Ejk2hzhFFJZJHT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L9Nmi/dJMcadoFl60/SlKDwU8Ejk2hzhFFJZJHT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L9Nmi/dJMcadoFl60/SlKDwU8Ejk2hzhFFJZJHT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL9Nmi%2FdJMcadoFl60%2FSlKDwU8Ejk2hzhFFJZJHT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1389&quot; height=&quot;1965&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;1389&quot; data-origin-height=&quot;1965&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;3051&quot; data-start=&quot;3034&quot; data-section-id=&quot;1lpehqe&quot; data-ke-size=&quot;size23&quot;&gt;Worst Fold 특징&lt;/h3&gt;
&lt;h4 data-end=&quot;3075&quot; data-start=&quot;3053&quot; data-ke-size=&quot;size20&quot;&gt;Elevation_MA3_std&lt;/h4&gt;
&lt;p data-end=&quot;3090&quot; data-start=&quot;3077&quot; data-ke-size=&quot;size16&quot;&gt;고도 변화가 크고 불규칙&lt;/p&gt;
&lt;p data-end=&quot;3104&quot; data-start=&quot;3092&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 회생제동 패턴 복잡&lt;/p&gt;
&lt;p data-end=&quot;3114&quot; data-start=&quot;3106&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 예측 어려움&lt;/p&gt;
&lt;h4 data-end=&quot;3133&quot; data-start=&quot;3116&quot; data-ke-size=&quot;size20&quot;&gt;SOC_Consumed&lt;/h4&gt;
&lt;p data-end=&quot;3144&quot; data-start=&quot;3135&quot; data-ke-size=&quot;size16&quot;&gt;Best Fold&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;0.10 ~ 0.15&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3181&quot; data-start=&quot;3171&quot; data-ke-size=&quot;size16&quot;&gt;Worst Fold&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;0.05 ~ 0.25&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3216&quot; data-start=&quot;3208&quot; data-ke-size=&quot;size16&quot;&gt;분산이 훨씬 큼&lt;/p&gt;
&lt;h4 data-end=&quot;3235&quot; data-start=&quot;3218&quot; data-ke-size=&quot;size20&quot;&gt;SoC_lag1_std&lt;/h4&gt;
&lt;p data-end=&quot;3256&quot; data-start=&quot;3237&quot; data-ke-size=&quot;size16&quot;&gt;배터리 상태 변동성이 큰 트립 집중&lt;/p&gt;
&lt;hr data-end=&quot;3261&quot; data-start=&quot;3258&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3265&quot; data-start=&quot;3263&quot; data-ke-size=&quot;size16&quot;&gt;반면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;Velocity_mean
Battery_Current_max&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3346&quot; data-start=&quot;3314&quot; data-ke-size=&quot;size16&quot;&gt;등은 Best/Worst Fold 간 차이가 거의 없었다.&lt;/p&gt;
&lt;p data-end=&quot;3385&quot; data-start=&quot;3348&quot; data-ke-size=&quot;size16&quot;&gt;즉 어느 환경에서도 안정적으로 예측에 기여하는 변수임을 확인하였다.&lt;/p&gt;
&lt;hr data-end=&quot;3390&quot; data-start=&quot;3387&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3396&quot; data-start=&quot;3392&quot; data-section-id=&quot;yi4awm&quot;&gt;결론&lt;/h1&gt;
&lt;p data-end=&quot;3483&quot; data-start=&quot;3398&quot; data-ke-size=&quot;size16&quot;&gt;이번 분석에서는 CatBoost 기반 모델에 Optuna 하이퍼파라미터 최적화를 적용하여 평균 RMSE 3.27km 수준까지 성능을 향상시킬 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;3531&quot; data-start=&quot;3485&quot; data-ke-size=&quot;size16&quot;&gt;특히 SHAP 분석과 Fold 분석을 통해 단순히 성능을 높이는 것에 그치지 않고,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3580&quot; data-start=&quot;3533&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3546&quot; data-start=&quot;3533&quot; data-section-id=&quot;1ek0v2x&quot;&gt;어떤 변수가 중요한지&lt;/li&gt;
&lt;li data-end=&quot;3566&quot; data-start=&quot;3547&quot; data-section-id=&quot;m6gnnc&quot;&gt;어떤 상황에서 모델이 실패하는지&lt;/li&gt;
&lt;li data-end=&quot;3580&quot; data-start=&quot;3567&quot; data-section-id=&quot;hcb4et&quot;&gt;왜 오차가 발생하는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3594&quot; data-start=&quot;3582&quot; data-ke-size=&quot;size16&quot;&gt;를 확인할 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;3594&quot; data-start=&quot;3582&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3594&quot; data-start=&quot;3582&quot; data-ke-size=&quot;size16&quot;&gt;+&amp;nbsp;&lt;/p&gt;
&lt;div&gt;오늘 추가한 핵심 작업: Lag / 이동평균 피처의 통계적 정당화&lt;br /&gt;문제의식&lt;br /&gt;기존 파이프라인에서는 시계열 피처를 만들 때 별 고민 없이 모든 변수에 이동평균(_MA3)과 1초 전 값(_lag1)을 붙였다. 그런데 검증 관점에서 보면 이게 약점이었다. &quot;그냥 만들었다&quot;가 아니라 &quot;데이터가 이런 성질을 가지므로 만들었다&quot;가 되어야 설득력이 생긴다.(1) Ljung-Box 검정 &amp;mdash; Lag Feature의 근거 (자기상관성)&lt;br /&gt;Lag Feature는 &quot;과거 값이 현재 값을 설명하는가?&quot;를 전제로 한다. 이걸 검증하는 게 자기상관 검정이다.python&lt;/div&gt;
&lt;div&gt;from statsmodels.stats.diagnostic import acorr_ljungbox lb = acorr_ljungbox(series, lags=[1], return_df=True)&lt;/div&gt;
&lt;div&gt;12개 주요 변수(Velocity, Battery Current/Temperature, SoC, Motor Torque, Battery_Power, Elevation, Throttle, Ambient Temperature, Heating/AirCon Power, 가속도)에 대해 lag1 자기상관을 검정한 결과,&lt;/div&gt;
&lt;blockquote data-stringify-type=&quot;quote&quot; data-ke-style=&quot;style1&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;모든 변수에서 p-value &amp;lt; 0.05&lt;/b&gt; &amp;rarr; 유의미한 자기상관성 확인&lt;/blockquote&gt;
&lt;div&gt;주행 데이터는 본질적으로 시간 의존성이 강하다(0.1초 전 속도와 지금 속도가 크게 다를 리 없다). 이 직관이 통계적으로도 확인됐으므로, &lt;b data-stringify-type=&quot;bold&quot;&gt;과거 시점 정보를 반영하는 Lag Feature 생성이 정당화&lt;/b&gt;된다.(2) ADF 검정 &amp;mdash; 이동평균(MA3)의 근거 (정상성)&lt;br /&gt;이동평균은 &quot;추세가 있어 불안정한(비정상) 변수&quot;를 매끄럽게 만들어 학습을 돕는다. 따라서 어떤 변수가 비정상인지 확인할 필요가 있다.python&lt;/div&gt;
&lt;div&gt;from statsmodels.tsa.stattools import adfuller adf_stat, p_val, *_ = adfuller(series, autolag='AIC')&lt;/div&gt;
&lt;div&gt;ADF 검정은 p-value가 &lt;b data-stringify-type=&quot;bold&quot;&gt;크면 비정상&lt;/b&gt;(추세 존재)이다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;비정상 변수 (p &amp;gt; 0.05):&lt;/b&gt;Ambient Temperature 등 &amp;mdash; 시간 흐름에 따라 추세가 뚜렷해 불안정 &amp;rarr;&lt;b data-stringify-type=&quot;bold&quot;&gt;이동평균 적용 정당화&lt;/b&gt;&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;정상 변수 (p &amp;lt; 0.05):&lt;/b&gt;Velocity, Motor Torque 등 대부분 &amp;mdash; 이미 안정적이라 추가 가공 없이 그대로 사용해도 무방&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;(3) 두 검정을 결합한 변수 자동 선정&lt;br /&gt;마지막으로 두 검정 결과를 합쳐, &lt;b data-stringify-type=&quot;bold&quot;&gt;어느 한쪽이라도 유의성이 검증된 변수만&lt;/b&gt; 시계열 피처 대상으로 자동 선정했다.python&lt;/div&gt;
&lt;div&gt;summary['lag1 포함'] = summary['Ljung-Box p'] &amp;lt; 0.05 summary['MA3 포함'] = summary['ADF p'] &amp;gt; 0.05 summary['선택'] = summary['lag1 포함'] | summary['MA3 포함'] ts_cols = summary[summary['선택']].index.tolist()&lt;/div&gt;
&lt;div&gt;이 과정을 거쳐 &lt;b data-stringify-type=&quot;bold&quot;&gt;총 12개 변수&lt;/b&gt;가 시계열 파생 대상으로 확정됐다. 손으로 고르던 걸 검정 기반으로 바꾸니, 변수 선택 자체가 재현 가능하고 설명 가능해졌다.오늘 추가한 시각화 ①: 편향 데이터 확인&lt;br /&gt;요약통계(Trip 1개 = 관측치 1개)로 변환한 뒤, 모델 입력으로 쓰기 전에 데이터가 한쪽으로 쏠려 있지 않은지 점검하는 섹션을 새로 넣었다.python&lt;/div&gt;
&lt;div&gt;cols_to_plot = ['Velocity [km/h]_mean', 'Battery_Power_mean', 'Battery Temperature [℃]_mean'] for i, col in enumerate(cols_to_plot): sns.histplot(trip_summary[col], kde=True, color='skyblue')&lt;/div&gt;
&lt;div&gt;Trip 단위 평균값 3종(속도, 배터리 출력, 배터리 온도)의 분포를 KDE 히스토그램으로 확인했다.&lt;/div&gt;
&lt;blockquote data-stringify-type=&quot;quote&quot; data-ke-style=&quot;style1&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;결론:&lt;/b&gt; 데이터가 특정 값에 편향되지 않고 넓은 범위에 고르게 분포하며, 학습을 방해할 만한 이상치도 보이지 않음.&lt;/blockquote&gt;
&lt;div&gt;Trip 단위로 집계하면 표본 수가 확 줄어들기(약 70개) 때문에, 몇몇 Trip에 쏠려 있으면 모델이 그쪽으로 과적합될 위험이 있다. 이 시각화로 그 위험이 낮다는 걸 확인했다.시각화 ②: 이상치 탐색 (15개 주요 변수)&lt;br /&gt;오늘 새로 그린 건 아니지만 파이프라인의 핵심 시각화라 함께 정리한다. 리샘플링(0.1초 &amp;rarr; 1초 평균) 직후, 주요 15개 변수를 각각 &lt;b data-stringify-type=&quot;bold&quot;&gt;히스토그램 + 박스플롯&lt;/b&gt;으로 그려 이상치를 검토했다.&lt;br /&gt;대상 변수: Velocity, Elevation, Throttle, Motor Torque, 종방향 가속도, 회생제동 신호, Battery Voltage/Current/Temperature, SoC, Heating/AirCon Power, Ambient Temperature, Heat Exchanger Temperature, Cabin Temperature.&lt;br /&gt;핵심 해석을 몇 가지만 추리면:&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Velocity:&lt;/b&gt;0km/h에 다수 집중(정차 시간) + 우측 145~150km/h 이상치는 실제 고속 주행 가능 &amp;rarr;&lt;b data-stringify-type=&quot;bold&quot;&gt;이상치 처리 안 함&lt;/b&gt;&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Throttle:&lt;/b&gt;100%를 넘는 값은 물리적으로 불가능 &amp;rarr; 센서 오류로 보고 처리 대상&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Battery Temperature:&lt;/b&gt;다봉형 분포 &amp;rarr; 서로 다른 외기 환경/주행 조건이 섞였다는 신호 (TripA/B 혼합의 흔적)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Ambient Temperature:&lt;/b&gt;-3~33℃ 다봉형 &amp;rarr; 여러 계절 데이터가 섞여 있음을 직접 보여줌&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;SoC:&lt;/b&gt;다봉형 &amp;rarr; 서로 다른 초기 충전 상태의 Trip이 혼합&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;이 시각화에서 가장 중요한 판단은 &lt;b data-stringify-type=&quot;bold&quot;&gt;&quot;극값 = 무조건 이상치&quot;가 아니라는 것&lt;/b&gt;이다. 고속 주행, 회생제동(-400A 수준 전류, 음수 토크), 저온 초기 난방 같은 값은 도메인상 충분히 정상이다. 그래서 이상치 처리는 다음 원칙으로 정리했다.변수이상치 범위처리근거Throttle [%]100% 초과clip(0, 100)물리적 상한 초과 = 센서 오류AirCon Power [kW]음수clip(lower=0)냉방 전력은 음수 불가Heating Power CAN [kW]20kW 초과보류5kW 이하는 저온 초기 난방으로 해석 가능Velocity / Torque / Current 등우측 극값처리 안 함고속&amp;middot;회생제동 등 정상 발생&lt;br /&gt;물리적 제약이 명확한 변수만 클리핑하고, 나머지는 실제 주행에서 발생 가능한 값으로 보고 유지했다.시각화 ③: 통계 검정 결과 표&lt;br /&gt;코드뿐 아니라 검정 결과를 표로 출력해, 어떤 변수가 어떤 근거로 선택됐는지 한눈에 보이게 했다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Ljung-Box 결과표:&lt;/b&gt;변수별 LB 통계량 / p-value / lag1 포함 여부&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;ADF 결과표:&lt;/b&gt;변수별 ADF 통계량 / p-value / MA3 유효 여부&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;결합 선정표:&lt;/b&gt;두 검정을 합쳐 최종 선택 여부&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Mann-Whitney U 검정표:&lt;/b&gt;TripA vs TripB 핵심 변수 8개의 중앙값 차이와 유의성&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;특히 마지막 Mann-Whitney U 검정은 흥미로운 결과를 줬다. 날씨(Weather)와 경로(Route/Area) 그룹 간 &lt;b data-stringify-type=&quot;bold&quot;&gt;주행거리(Distance) 차이는 통계적으로 유의하지 않았다&lt;/b&gt; (p &amp;asymp; 0.79, 0.75 / rank-biserial 0.04~0.05).&lt;/div&gt;
&lt;blockquote data-stringify-type=&quot;quote&quot; data-ke-style=&quot;style1&quot;&gt;얼핏 &quot;환경이 주행거리에 영향을 준다&quot;와 반대되는 결과처럼 보이지만, 해석은 이렇다. 환경(날씨&amp;middot;온도&amp;middot;경로)은 &lt;b data-stringify-type=&quot;bold&quot;&gt;거리 자체&lt;/b&gt;가 아니라 &lt;b data-stringify-type=&quot;bold&quot;&gt;같은 거리를 가는 데 드는 에너지/SoC 소모&lt;/b&gt;에 영향을 준다.&lt;/blockquote&gt;
&lt;div&gt;즉 환경 변수는 distance가 아니라 &lt;b data-stringify-type=&quot;bold&quot;&gt;distance당 효율&lt;/b&gt;을 좌우하는 요인으로 봐야 한다는 방향이 잡혔다.그 외 보강한 설명들&lt;br /&gt;블로그/문서화 관점에서, 코드 셀 사이사이에 판단 근거를 적은 markdown을 대거 추가했다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;리샘플링:&lt;/b&gt;0.1초 단위는 노이즈가 크고 용량이 과도 &amp;rarr; 1초 평균으로 집계. 단, 순간 이벤트(급가속&amp;middot;급제동) 정보 손실은 변화량(_diff) 피처로 부분 보완하는 trade-off 명시.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;결측치 처리:&lt;/b&gt;SoC 계열(전체 대비 2~3%)은 핵심 변수라 Trip별 앞뒤 보간으로 유지. Requested Coolant Temperature는 Trip 단위로 통째로 비어 보간 불가 &amp;rarr; 삭제.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;요약통계 &amp;amp; 변화량:&lt;/b&gt;시계열을 &quot;Trip 1개 = 관측치 1개&quot;로 압축. 평균이 비슷한 두 Trip이라도 변화량 표준편차가 크면 더 역동적인 주행임을 포착.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;b data-stringify-type=&quot;bold&quot;&gt;Overview 병합:&lt;/b&gt;센서 데이터에 없는 Trip 메타데이터(날씨, 경로, 시작/종료 SoC)를 결합. 병합 후 중복 변수(외기온 mean/max, 배터리 온도 mean/max, 변별력 없는 Fan)는 재검토 후 제거.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;오늘 작업 요약&lt;br /&gt;Ljung-Box 검정자기상관 확인 &amp;rarr; Lag Feature 근거신규ADF 검정정상성 확인 &amp;rarr; 이동평균 근거신규검정 결합 변수 선정12개 시계열 변수 자동 선정신규편향 데이터 확인Trip 단위 평균 분포 히스토그램신규설명 markdown 보강리샘플링&amp;middot;결측치&amp;middot;병합 근거 명시보강전체 과정 요약 표11단계 파이프라인 한눈 정리신규이상치 탐색 시각화15개 변수 히스토그램+박스플롯기존&lt;br /&gt;핵심 한 줄: &lt;b data-stringify-type=&quot;bold&quot;&gt;오늘은 &quot;피처를 만든 행위&quot;에 &quot;통계적 근거&quot;를 붙여, 파이프라인을 설명 가능하고 재현 가능하게 만든 날이었다.&lt;/b&gt;&lt;br /&gt;다음 단계는 LassoCV + VIF로 최종 변수를 추리고, 통합 모델 vs TripB 단독 모델의 성능을 비교하는 것이다.&lt;/div&gt;</description>
      <category>내일배움캠프(QA,QC_5기)</category>
      <author>lshxkwh</author>
      <guid isPermaLink="true">https://lshxkwh.tistory.com/53</guid>
      <comments>https://lshxkwh.tistory.com/53#entry53comment</comments>
      <pubDate>Fri, 5 Jun 2026 20:18:56 +0900</pubDate>
    </item>
  </channel>
</rss>