<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>harii-in.log</title>
        <link>https://velog.io/</link>
        <description>😊</description>
        <lastBuildDate>Mon, 22 Jan 2024 06:19:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>harii-in.log</title>
            <url>https://velog.velcdn.com/images/harii-in/profile/714e3996-1af7-4091-9234-999a45fa597e/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. harii-in.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/harii-in" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 빅프로젝트 발표회]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%9C%ED%91%9C%ED%9A%8C</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%9C%ED%91%9C%ED%9A%8C</guid>
            <pubDate>Mon, 22 Jan 2024 06:19:26 GMT</pubDate>
            <description><![CDATA[<h1 id="메타버스-발표회">메타버스 발표회</h1>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/88576cc1-3b48-48b5-bfdd-b04577aff8dd/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/559b2549-104c-4b70-9011-47ea67fb759d/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>* 발표회 전날 메타버스를 사전 탐방했다. 생각보다 캐릭터를 다양하게 꾸밀 수 있어서, 꾸미는 재미가 나름 있었다.</td>
<td></td>
</tr>
<tr>
<td>* 발표회 전날 메타버스 사전 탐방 시간이 꽤 길었는데, 이때 다른 팀들 부스를 꽤 돌았다.</td>
<td></td>
</tr>
<tr>
<td>* 메타버스 발표회 당일, 팀원들과 시간을 나눠서 부스를 지켰다. 최소한 한 명은 지켜야 하지만,</td>
<td></td>
</tr>
<tr>
<td>팀원들 모두 지쳤는지 대부분 우리 부스 안에 있었다 ㅎ</td>
<td></td>
</tr>
<tr>
<td>* 사실 많은 분들이 오실 줄 알았는데, 코치님과 매니저님, 그리고 운영진분들이 다였다! 질문이 많이 올까 봐 나름 걱정했는데, 다들 발표 자료 보고, 발표 영상 보는 게 다였다!</td>
<td></td>
</tr>
<tr>
<td>* 각 부스의 입구에 포스터가 있고, 부스에는 발표 영상과 발표 자료, 그리고 후기를 남길 수 있는 패들렛이 존재하였다. 나는 보통 다른 조들의 발표 자료를 보고, 발표 영상 중에 시연 영상 부분만 봤다. 아마 다른 분들도 그랬지 않을까 생각해 본다.</td>
<td></td>
</tr>
<tr>
<td>* 많은 분들이 패들렛에 좋은 후기와 추가 보완했으면 하는 점들을 적어주셨다.</td>
<td></td>
</tr>
</tbody></table>
</br>

<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/463d56bb-33c4-4ba1-a912-1ab9afbcce5d/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/018df6cc-5ef6-447b-92f6-1271f1b6d31f/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>* 조원들이랑 부스 지키는 시간을 정해뒀다. 내 시간이 아닐 때에는 다른 부스도 돌아다니며 발표 자료를 감상했다.</td>
<td></td>
</tr>
<tr>
<td>* 매니저님이랑 코치님이랑 5, 6반 다 같이 하트도 그렸다!! 하트 만들기 얼마나 힘들던지...</td>
<td></td>
</tr>
<tr>
<td>* 모두 다양하게 옷을 입는다. 각자의 개성이 드러나는 캐릭터가 아니었을까 생각한다.</td>
<td></td>
</tr>
</tbody></table>
</br>

<h2 id="이벤트">이벤트</h2>
<p><img src="https://velog.velcdn.com/images/harii-in/post/2d8d496d-df1c-4b9b-b19d-5cda3f32ce5f/image.png" alt=""></p>
<ul>
<li>메타버스를 돌아다니면서 14개의 보물 상자를 모두 모아 문장을 완성하는 이벤트다.</li>
<li>사실 이전 기수분들의 블로그를 봐서 정답을 알고 있었다. 하지만 진짜로 그 문장일까 생각했지만, 똑같았다 ㅎㅎ 5기 때는 바꾸셔야 할 거 같습니다!</li>
<li><strong><em>빅프로젝트 정말 수고많았어요!</em></strong></li>
</ul>
</br>

<hr>
<h2 id="회고">회고</h2>
<ul>
<li>어떤 서비스를 만들건지 기획부터 시작해서, 개발까지. 처음부터 끝까지 팀원들과 하나하나 상의하면서 프로젝트를 잘 마무리 할 수 있었다.</li>
<li>저번 기수(3기)가 그 이전 기수(2기)보다 한 주 정도 빅 프로젝트 기간이 짧았다고 들었다. 하지만 이번 기수(4기) 또한 이전 기수(3기)보다 한 주 더 짧아졌다. 이 부분이 매우 아쉬웠다.
프로젝트 주제를 정하고 기획하는데 생각보다 많은 시간이 들어갔다. 나를 제외한 다른 조들도!
기간이 짧아진 만큼, 개발 기간이 짧아지다 보니까, 시간에 쫓기기도 하고, 더 구현하고 싶은 기능들을 구현하지 못한 부분이 아쉬웠다.</li>
<li>물론 내가 잘 못하는 것도 맞다! 나에게는 첫 웹 프로젝트였다. 여기에 우리 팀원들 모두 백엔드, 프런트엔드가 처음이었다! 그래서인지, 다른 조의 경우 웹 프로젝트를 해본 경험이 있는 분들의 경우, 우리보다 더 수월하게 프로젝트를 진행해 나가긴 했다. 하지만 우리 팀원들 정말 최선을 다했고, 그걸 모두 알기 때문에 후회는 없다! 이 기회로 나 또한 많이 성장했다고 생각한다!</li>
<li>웹 프로젝트를 진행해 본 경험이 있는지, 프론트, 백, AI 등 어떤 역할을 담당하고 싶은지 등의 설문을 받고 조를 구성해 주는 것도 하나의 좋은 방법이라고 생각된다.</li>
<li>프로젝트 주제를 정하고 기획하는 단계가 많이 어려웠다. 그리고 마지막 발표를 내가 담당해서, 발표문을 작성하고 발표 영상을 찍었다. 근데, 이런 부분을 DX랑 하면 어떨까?라는 생각을 했다. DX가 기획하고 AI 팀에서 개발하는 것도 괜찮지 않나? 그랬다면, 개발에 더 집중하고 더 많은 기능, 더 좋은 기능을 구현할 수 있지 않았을까 하는 생각이 든다!</li>
<li>이러나저러나! 이번 빅프로젝트를 통해 나 또한 한 발짝 더 성장했다고 생각한다! 리액트가 처음이었지만, 또 도전하니 안 되는 것은 없구나!라는 걸 느꼈다. 몇 주 동안 매일 구글링하고 공부하고 시도해 봤다. 잘 모를 때는 주변 친구들에게 도움 요청해서 배웠다. 때로는 힘들었지만, 끝나고 나니 엄청 뿌듯하다! <em>모두 정말 수고하셨습니다. 좋은 결과 있기를 바라요!</em></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 빅프로젝트 2]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</guid>
            <pubDate>Mon, 22 Jan 2024 05:09:03 GMT</pubDate>
            <description><![CDATA[<h1 id="new-kt🌟">New KT🌟</h1>
<p> <img src="https://velog.velcdn.com/images/harii-in/post/37d7f7e1-6c76-4465-bd7f-a955a1579af1/image.jpg" alt=""></p>
<p>15조에서 개발한 &quot;회의 보조 서비스 플랫폼&quot;에 대해 소개해드리려고 합니다. 이 서비스는 회의의 목적을 명확히 하고, 효율적으로 진행할 수 있는 도구를 제공하여 불필요한 회의를 줄이고, 직원들과 기업의 업무 효율성을 향상시키는 데 중점을 두었습니다.</p>
<h2 id="서비스-기획-배경">서비스 기획 배경</h2>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/f1ea19b2-5130-4ced-a444-4c4881deb208/image.jpg" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/f5cf5495-279e-488a-8ebf-0dd569a1a973/image.jpg" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/a4c712c7-396b-45db-a0a6-3fe8bdafad04/image.jpg" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td><a href="https://www.chosun.com/economy/weeklybiz/2023/01/19/NANH4BX27NAK5FRJAJM4236IWM/">“회의 왜 하는지…” 직장인들 불만 이유 1위는</a></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<ol>
<li>다양한 종류의 회의가 팀 협업에 중요한 역할을 하는데,
최근 조사에서 69%의 참가자가 불만족스러운 회의 경험을 한다는 결과가 도출됨.</li>
<li>불만족의 주요 이유는 결론 부재와 목적 부재.</li>
<li>불필요한 회의는 업무 효율성 감소와 직원 스트레스 증가로 이어짐.</li>
<li>기업 입장에서는 불필요한 회의를 줄이고 업무 효율성을 높이기 위한 회의 문화 개선 필요.</li>
</ol>
<h2 id="주요-기능">주요 기능</h2>
<p align="center">
<img src="https://velog.velcdn.com/images/harii-in/post/a9f75d91-e05a-449a-b409-040cf105a9f8/image.jpg" width="70%" ></p>

<ol>
<li>실시간 음성인식(STT) 기술을 활용하여 중요한 키워드 추출.</li>
<li>추출된 키워드를 기반으로 실시간으로 뉴스 데이터 검색 및 요약 제공.</li>
<li>회의 종료 후 맞춤 회의록 자동 생성.</li>
</ol>
<h2 id="서비스-차별점">서비스 차별점</h2>
<p align="center">
<img src="https://velog.velcdn.com/images/harii-in/post/f975bdcc-505a-486b-a355-092264fa291c/image.jpg" width="70%" ></p>

<ul>
<li>네이버와 줌과의 비교에서 실시간 키워드 추출과 회의록 커스터마이징에서 차별화.</li>
<li>중요 키워드를 추출하고 실시간으로 해당 주제의 뉴스를 검색하여 참여자들에게 제공함.</li>
</ul>
<h2 id="서비스-플로우">서비스 플로우</h2>
<p align="center">
<img src="https://velog.velcdn.com/images/harii-in/post/a9fb6985-9e7b-47e7-87d5-fb926767ce2b/image.jpg" width="70%" ></p>

<ul>
<li>회원가입을 통해 서비스 이용 가능.</li>
<li>로그인 후 가장 가까운 회의 일정 확인 및 관리.</li>
<li>회의 참여 페이지에서 실시간 STT를 통한 키워드 추출.</li>
<li>회의 종료 후 회의록을 통해 회의 내용 효율적으로 확인 가능.</li>
</ul>
<h2 id="ai-기술">AI 기술</h2>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/481b7f68-3fe8-46b5-8673-1503e5882c27/image.jpg" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/37df7cf7-c7ea-4e44-b3e6-2a656ff2e31d/image.jpg" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td><img src="https://velog.velcdn.com/images/harii-in/post/cac948d3-6191-49d5-9f88-bca463d78d43/image.jpg" alt=""></td>
<td><img src="https://velog.velcdn.com/images/harii-in/post/a77348ad-331e-42b5-a8be-caedb158a9ba/image.jpg" alt=""></td>
</tr>
</tbody></table>
<ul>
<li>AI 기술은 STT, 키워드 추출, 키워드 설명, 회의 요약 네 가지로 구성.</li>
<li>Google Cloud STT API와 GPT OpenAI API를 활용한 키워드 추출.</li>
<li>KR-WordRank 모델을 사용하여 유의미한 키워드 추출.</li>
<li>Naver Search API를 통해 키워드에 대한 뉴스 요약 제공.</li>
<li>KoBART 모델과 OpenAI API를 활용한 회의 요약.</li>
</ul>
<h2 id="기대효과">기대효과</h2>
<p align="center">
<img src="https://velog.velcdn.com/images/harii-in/post/c25a30bb-4174-44b2-a0e2-a33b61abc7c7/image.jpg" width="70%" ></p>

<h3 id="b2c">B2C</h3>
<ul>
<li><strong>개인 업무 효율성 증가</strong>:
서비스를 통해 낯선 용어에 신속하게 적응하며,
회의 내용을 정확히 이해할 수 있어 업무 효율성이 향상.</li>
<li><strong>시간 및 비용 절감</strong>:
회의 참석자들은 회의에 소비되는 시간을 최소화하고,
목적을 명확하게 이해함으로써 시간과 비용을 절감.</li>
<li><strong>자동 회의 기록 관리</strong>:
생성된 회의록을 활용하여 회의 내용을 간편하게 복습하고, 업무 계획을 세울 수 있음.</li>
<li><strong>실시간 키워드 추출과 뉴스 요약</strong>:
회의 중에 실시간으로 키워드를 추출하고 최신 정보를 받아볼 수 있어
학습과 정보 습득이 용이.</li>
</ul>
<h3 id="b2b">B2B</h3>
<ul>
<li><strong>기업 회의 문화 개선</strong>:
기업은 효율적인 회의 도구를 통해 불필요한 회의를 줄이고,
목적을 명확히 하여 회의 효율성을 향상.</li>
<li><strong>팀 생산성 향상</strong>:
팀원들은 명확한 의사소통과 업무 목표 공유를 통해 팀 생산성이 향상되고,
효율적인 업무 프로세스를 유도.</li>
<li><strong>자동화된 데이터 분석 및 리포트</strong>:
서비스는 회의 기록을 분석하여 기업에 중요한 인사이트를 제공하고,
통계 및 리포트를 통해 효과적인 의사결정을 지원.</li>
<li><strong>다양한 팀 형태 지원</strong>:
서비스는 다양한 팀 구성과 업무 환경에 적응 가능하여 기업이 유연하게 서비스를 활용.</li>
</ul>
<h2 id="활용방안">활용방안</h2>
<p align="center">
<img src="https://velog.velcdn.com/images/harii-in/post/9d00809d-d525-42eb-b159-4c101dce5bd5/image.jpg" width="70%" ></p>

<ul>
<li>인트라넷 시스템과의 통합으로 모든 회의 자료 효율적 관리.</li>
<li>업무 용어 사전을 활용하여 신입사원들의 빠른 업무 적응 지원.</li>
<li>학교에서는 수업과 관련된 키워드를 통해 실시간 정보 공유로 학습 향상.</li>
</ul>
<h2 id="기능-확장">기능 확장</h2>
<ul>
<li>다국어 지원 및 문화적 대응:
서비스를 국제적으로 확장하기 위해 다양한 언어를 지원</li>
<li>언어 감정 분석:
음성 분석을 통해 회의 참여자의 감정을 식별하고,
긍정적인 톤이나 부정적인 피드백을 탐지하여 효과적인 의사소통을 지원</li>
<li>회의 데이터 분석 및 통계:
회의 기록을 분석하여 회의의 품질, 참여도, 주요 토픽 등에 대한 통계를 제공</li>
</ul>
<h2 id="포스터">포스터</h2>
<p><img src="https://velog.velcdn.com/images/harii-in/post/acb07700-2a25-41d8-afa3-9eda390cb7f1/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 빅프로젝트 1]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%B9%85%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Wed, 17 Jan 2024 15:48:12 GMT</pubDate>
            <description><![CDATA[<p>사실 이 글을 쓰는 시점은 빅 프로젝트가 끝났다!
모든게 끝나니 여유가 생긴 시점에, 빅프로젝트 회고 겸 글을 써보고자 한다!</p>
<h3 id="일정">일정</h3>
<table>
<thead>
<tr>
<th align="center">월</th>
<th align="center">화</th>
<th align="center">수</th>
<th align="center">목</th>
<th align="center">금</th>
</tr>
</thead>
<tbody><tr>
<td align="center">프로젝트 수행</td>
<td align="center">조별 코칭</td>
<td align="center">프로젝트 수행</td>
<td align="center">그룹코칭</td>
<td align="center">산출물 제출</td>
</tr>
<tr>
<td align="center">화요일, 목요일에 코치님들이 오셔서</td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">진행상황을 체크하시고 피드백도 주시는 코칭 시간을 진행했습니다.</td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">따라서 저희 조는 일단, 화-목은 기본적으로 KT 분당 교육장에서 대면으로 진행했습니다.</td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<h2 id="1주차-프로젝트-기획설계">1주차: 프로젝트 기획/설계</h2>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/693b097c-008b-45c3-9e3b-ce694dcb3e7f/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/aa4c4e49-79ac-474b-86c6-dd15e510e085/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>1주차에는 주제 정하기 바빴다.</td>
<td></td>
</tr>
<tr>
<td>1등 워크숍 때 정한 주제가 에이블에서 추구하는 프로젝트 방향성과 다르다는 피드백을 받았다.</td>
<td></td>
</tr>
<tr>
<td>B2C 관점 말고 B2B/B2G 관점으로 생각해보며 주제를 다시 한 번 생각해보라고 하셨다.</td>
<td></td>
</tr>
</tbody></table>
<p>워크숍 때 생각했던 주제들 모두 엎고 팀원들 모두 다시 주제를 하나씩 더 생각해오기로 했다.</p>
<ul>
<li>팀즈 프리미엄, 회의 요약 및 웹캠으로 사람을 분석해서 얼마나 집중했는지 등</li>
<li>가족 그림책 생성 서비스, 가족 구성원의 그림체로 그림 생성 후 그림책 생성</li>
<li>장례서비스 플랫폼, 장례 절차 추천 서비스 등</li>
<li>금융 교육 플랫폼, 증권 기사 요약 후 키워드 리스트 업 후 교육 진행 등</li>
<li>KT 버전 에이닷, 통화 요약, 캘린더 일정 관리, 스팸 전화 등</li>
</ul>
<p>이렇게 각자 의견을 내면, 어떤 의견이든 피드백을 통해 구체화시키며 한 주제에 대해 기능들을 잡아봤다. 이후, 각자 투표를 통해 어떤 주제가 가장 마음에 드는지 정했다. 그 결과, 팀즈 프리미엄과 금융 교육 플랫폼이 가장 많은 투표를 받았다.</p>
<p>두 주제 중 어떤 주제로 할 지 정하기 위해</p>
<p>각 주제에 대해</p>
<ul>
<li>웹 페이지 구성</li>
<li>기능</li>
<li>데이터</li>
<li>주의점</li>
</ul>
<p>등 구체화 하기 시작했다.</p>
<p>이렇게 구체화 하다보니, 두 주제를 합쳐보면 어떨까? 라는 의견이 나왔고,
전부 좋은 아이디어인 거 같다며 새롭게 의견들이 또 나왔다!</p>
<p>그 결과 우리 조의 주제는</p>
<h3 id="new-kt-new-keword-tool👍🏻">New KT, New Keword Tool👍🏻</h3>
<p>** 회의 보조 시스템**이다!
실시간으로 회의가 진행되고 있을 때, 회의 내용에서 핵심 키워드를 추출하고, 해당 키워드와 관련된 뉴스 기사를 요약 제공하는 서비스이다.</p>
<p>우리의 서비스에 대해서는 나중에 차차! 이야기하도록 하고!</p>
<hr>
<h2 id="회고">회고</h2>
<p>정말 빅프로젝트에서 주제 정하는 게 제일 힘들다더니 진짜인 거 같다.
일주일 내내 새로운 주제 어떤한 기능. 이것만 생각하고 계속 팀원들끼리 의견을 주고받았다.
마지막에는 다들 &quot;이제 더 이상 내 머리에서 아이디어는 나오지 않아!&quot;라고 외칠 정도로 ㅎㅎ
정말 모두가 최선을 다해 머리를 쥐어짜내며 주제를 정하였다.</p>
<p>코치님들도 주제가 가장 중요하니 시간이 더 걸리더라도 많은 이야기를 나눠보라고 하셨다.
정말 목 아픈 시간들이었지만, 내 머리에서도 이런 아이디어가 나올 수 있구나 싶은 시간들이었다.
그리고 나는 내가 처음부터 아이디어를 내는 것보단, 누군가에 아이디어에 아이디어를 더하는 게 더 잘하는 사람인 듯 하다.ㅎㅎㅎ</p>
<hr>
<p>얼마 전 아이폰에서도 드디어! 통화 녹음이 된다는 것으로 이슈가 됐었다.
하지만 SKT 사용자만 가능했는데, 그 이유가 바로 &#39;에이닷&#39;이다.</p>
<p>따라서 내가 낸 아이디어 중 하나가 KT 버전 A-DOT(에이닷)이다.
&#39;나만의 개인 비서&#39;라는 문구를 내세울 만큼, 에이닷은 사용자 맞춤형으로 다양한 정보를 제공한다. 통화 녹음 및 요약 기능을 제외하고도, 빅스비나 시리를 연상시키는 서비스도 제공한다.</p>
<p>나는 에이 닻을 보며 그럼 KT에는 없나?라는 생각을 했고,
&#39;KT AI 통화 비서&#39;를 발견했다.
<img src="https://velog.velcdn.com/images/harii-in/post/c781ebbd-f4e1-4fc5-a055-f5bcd4c53228/image.png" alt="">
하지만 보시다시피, KT AI 통화비서는 소상공인에게 제공되는 서비스로,
전화를 대신 받아주고 처리해 주는 AI 비서 서비스이다.</p>
<p>나는 이를 보고, 우리가 KT의 개인 통화 비서를 만들어보는 것이 어떨까!라는 생각을 했다!</p>
<p>내 주제는 채택되지는 않았지만, 나는 이번 주제를 정하기 위해 다양한 의견을 생각하고 찾아보면서,
내가 생각했던 아이디어는 역시 벌써 많이 나와있고, 더 많은 기능을 가지고 있음을 실감했다.
그와 동시에 놀라웠고 신기했다.</p>
<p>주제를 생각하면서, 창의성을 넘어서, 현재 기업들이 어떤 AI 서비스를 가지고 있고, 얼마큼 더 발전됐는지를 알 수 있었다. 특히 나는 KT에서 제공하는 서비스에 대해 많이 찾아봤다. 이번 기회를 통해 KT에서 어떤 서비스를 제공하는지, KT가 어떤 사업을 했는지 등 많은 것들을 알 수 있어서 참 좋았던 경험이기도 하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 1등 워크숍]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EB%93%B1-%EC%9B%8C%ED%81%AC%EC%88%8D</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EB%93%B1-%EC%9B%8C%ED%81%AC%EC%88%8D</guid>
            <pubDate>Tue, 26 Dec 2023 00:57:43 GMT</pubDate>
            <description><![CDATA[<p>드디어 <strong>* 🎉빅 프로젝트🎉 *</strong> 시작❗
7차 미니프로젝트 팀이 그대로 쭉 빅 프로젝트 조로 이어졌습니다 ㅎㅎ</p>
<p>이제 진짜로 빅프로젝트 과정이 시작되었는데요, 그 첫번째 시작이 이번 1등 워크숍입니다!
이번 워크숍은 <strong>* 빅 프로젝트 팀원들과 친해지고, 빅프로젝트 과제를 하나로 선정 *</strong> 하는 시간을 가졌습니다!</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/46900c48-88dc-4c42-9e00-e7c324ae2796/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/cff02d5f-87e6-4b90-8928-e95bd8c0377b/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>팀원들 간에 이름 대신 영어 이름을 사용하기로 했는데, 생각나는 이름이 없어서 제가 좋아하는 윈터☃로 했습니다 ㅋㅋㅋㅋ</td>
<td></td>
</tr>
<tr>
<td>갑자기 5반의 윈터가 된 저...</td>
<td></td>
</tr>
<tr>
<td>그리고 팀원들이 페르소나 작업 중에 그려 준 저... 나름 닮은 거 같기도 하고 ㅎㅎ 다들 귀엽네요 ㅎㅎ</td>
<td></td>
</tr>
</tbody></table>
</br>

<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/276e3c6f-005d-43ac-b224-0786b76288db/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/c83bf6b9-9c75-43bc-97b5-4be6653d9073/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>1등 워크숍을 진행하기 전에 각자 개인별 과제 정의서를 작성했었습니다.
각자 하고 싶은 주제와 선정 배경 및 기대효과 주요 서비스 내용 및 주요 기능 등을 적어왔고, 각자 팀원들이 적어온 개인별 과제 정의서를 읽어보고 하나의 주제로 정하고 그 주제를 확장해 나가는 방식이었습니다!</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/7ee27208-47f5-4bd4-92ee-9b68c7db6941/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/05dce02d-8830-4ab9-8269-9c60314cbd15/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>사실 주제를 확장하는 시간을 가지면서, 한 주제 3번은 엎은 거 같아요! 결국 그다음 날도 엎고 또 엎고... 주제 정하는 게 너무 힘들고 나중에는 머리가 더 이상 돌아가지 않아서 저희가 가진 주제를 다시 읽고 또 읽고 또 확장해나가다가 지금의 주제를 정하게 되었습니다!
어떤 주제인지는 차차...ㅎㅎ 밝혀보는 걸로 할게요.</p>
</br>

<p><img src="https://velog.velcdn.com/images/harii-in/post/14ea7ddc-591e-4987-92ca-e64b7b29daa1/image.png" alt=""></p>
<p>제가 개인별 과제 정의 서애 적은 주제는
AI를 이용한 콜센터 지원 서비스였는데요.
고객의 음성을 통해 감점을 분석하고, 또 실시간 대화를 요약하고 흐름을 이해해서 답변도 추천해 주고 어떤 상담을 했는지 요약해 주는지 등등의 서비스를 생각했어요!
근데 위 사진이 KT의 AICC인데, 제가 생각한 모든 기능들이 벌써 전부다 너무 잘 되어있어서 ㅎㅎ
참.. 기술이라는 게 대단합니다.. 역시 내가 생각하면 다른 사람도 똑같이 생각하는 게 아이디어겠죠..</p>
<p>이렇게 1등 워크숍이 끝났고! 빅 프로젝트 잘 진행해서 좋은 결과를 얻을 수 있었으면 좋겠습니다.</p>
</br>

<hr>
<h2 id="🍚-밥집">🍚 밥집</h2>
<h3 id="✔️-하성손칼국수">✔️ 하성손칼국수</h3>
<blockquote>
<ul>
<li>매주 화요일 휴무</li>
<li>11:00-20:00</li>
<li>경기 성남시 분당구 불정로77번길 4-4</li>
<li>민속칼국수 10,000</li>
<li>해물칼국수 10,000</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/bd117ba2-efa1-473a-bccb-6013f7da9aff/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/24d5eb96-3860-419b-9be3-96afd1d3c790/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/ef23cd55-68b7-4a91-aee2-abe334efef27/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>1등 워크숍은 대면 필수여서 항상 그렇듯이, 여기 분당 KT 본사에 왔습니다 ㅎㅎ
마침 비가 엄청 많이 오는 날이어서, 비도 오니까 칼국수를 먹으러 가자! 해서 칼국수를 먹으러 오게 되었습니다. 하지만 8월부터 지금까지 먹으면서 거의 모든 집이 맛있었는데, 이 집은 어르신 들게 정말 인기 많은 집이더라고요? 하지만 저와 제 팀원들 입맛에는 맞지 않았습니다..😭
왜냐하면, 너무너무 짰습니다! 저는 민속 칼국수를 먹었는데, 칼국수가 이렇게 짤 수 있나 싶을 정도로 너무너무❗ 짰습니다❗
오히려 제일 오른쪽 사진인 열무 비빔밥이 더 맛있었다는..
혹시 이 집이 맛있었던 분들 계시다면 알려주세요..
우리가 먹은 게 이상했었나... 싶을 정도로 짰거든요..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 2차 에이블데이★]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</guid>
            <pubDate>Mon, 25 Dec 2023 15:58:07 GMT</pubDate>
            <description><![CDATA[<h1 id="🎉-2차-aivle-day-🎉">🎉 2차 AIVLE DAY! 🎉</h1>
<h3 id="일정">일정</h3>
<p><strong>코딩테스트 - 취업 컨설팅 특강 - 랜선 회식 순으로 진행되었다!</strong></p>
<h3 id="코딩테스트">코딩테스트</h3>
<p>벌써 마지막 3차 코딩 테스트..
사실 코딩 테스트는 1, 2, 3차 가면 갈수록 점점 더 쉬워진 거 같아요!
제가 실력이 늘어서 그렇게 생각한 거라면 참 좋겠지만, 다른 분들도 다 그렇게 생각한다고 하셔서! 점점 더 쉬워진 게 맞는 거 같습니다 ㅎㅎ
사실 변명이라면 변명이지만, 근 며칠간 미니 프로젝트 + 졸업 논문 + 기말고사 때문에 쉴 틈 없이 바빠서, 코딩 테스트 준비를 또 거의 못했어요.
그래도 이전에 나름 열심히 준비했던 이유인지, 다행히도 이번 코딩 테스트는 다 맞았네요! 테스트 끝나자마자 점수가 나와서 얼마나 놀랐는지요..ㅎㅎ
앞으로 꾸준히 코딩 테스트 준비해서 앞으로도 좋은 결과가 있으면 좋겠습니다.</p>
</br>

<h3 id="코딩-마스터스-시상">코딩 마스터스 시상</h3>
<p><img src="https://velog.velcdn.com/images/harii-in/post/4679773d-14a6-416b-8d8c-c485f824cade/image.png" alt=""></p>
<p>23.11.06. ~ 23.12.01. 약 4주 동안 2차 코딩 마스터스가 진행됐었습니다!
1차 코딩 마스터스 때 마스터로 끝내서, 이번에는 그랜드 마스터가 목표였고 코딩 마스터스가 시작한 초기에는 하루에 5문제씩 풀려고 노력했습니다!
하지만... 앞에서도 말한 변명? 과같이, 인생이 너무 힘들고 바쁜 관계로 이번에는 마스터도 못 찍었습니다😭😭
진짜 너무 제 자신한테 분하고 화가 나서 전날에 밤을 새더라도 마스터는 찍어야 하나 정말 고민 많이 했어요. 근데 이번 2차에는 기초 문제가 완전히 없고 초급부터 시작해서 중급 문제 수가 많아졌던 걸로 기억합니다. 그래서 그런지 마스터 찍기는 너무 어려울 듯하여 포기했습니다.
정말 제 자신한테 분하고 억울하고 화가 나는 이번 2차 코딩 마스터스였습니다.
다시 한번 시간 관리의 중요성, 계획의 중요성 등등을 깨닫는 하루입니다.</p>
</br>

<h3 id="에이블-데이-선물">에이블 데이 선물</h3>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/0af893a4-55e6-43bb-baba-eb4b65810edd/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/a6e31261-e6ff-4da7-8b24-34995da71aa1/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td><img src="https://velog.velcdn.com/images/harii-in/post/d508ca0c-a0e2-4d2b-917c-652e0d79aba7/image.png" alt=""></td>
<td><img src="https://velog.velcdn.com/images/harii-in/post/ad99e7ee-28d2-4c7c-b696-09435f793166/image.png" alt=""></td>
</tr>
</tbody></table>
<p>에이블 데이 1차 때는 텀블러!를 받았었는데, 이번에는 핸드크림과 여행용 파우치네요!
사실 저번 기수? 까지는 화장품을 줬던 걸로 기억해서 내심 좀 궁금했는데. 이번 기수부터는 선물도 그렇고 많이 바뀐 거 같습니다!
아직 핸드크림 향도 안 받아봤지만, 둘 다 잘 사용하도록 하겠습니다!
이 선물 받기 며칠 전이 생일이었던 터라, 더 이상 올 선물이 없는데? 하고 택배를 받았었는데, 에이블에서 제 생일을 챙겨준 듯한 느낌이 들어서 기분이 조금 좋았어요!ㅋㅋㅋ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 7차 미니 프로젝트]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-7%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-7%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Mon, 25 Dec 2023 15:40:37 GMT</pubDate>
            <description><![CDATA[<h2 id="📢-7차-미니-프로젝트">📢 7차 미니 프로젝트</h2>
<h3 id="⭐-chatgpt를-수어로-사용하는-웹서비스-데모-구현">⭐ ChatGPT를 수어로 사용하는, 웹서비스 데모 구현</h3>
</br>

<p>총 7일 동안 </p>
<ul>
<li>데이터 파이프라이 구축</li>
<li>수어 번역 모델 생성 및 관리</li>
<li>AWS 클라우드에 배포 환경 구축</li>
<li>ChatGPT API 사용법 연구</li>
<li>ChatGPT를 수어로 사용하는 웹 서비스 구현
을 진행했습니다!</li>
</ul>
<p>사실 인생 처음으로 웹서비스를 구현하는거라 정말 힘들었습니다. 뭔지 모르고 굴러가는 얼레벌레 감자였어요.</p>
<p>그래도 이번 미니 프로젝트가 빅 프로젝트 하는데 많은 도움이 될 거라고 강사님께서 말씀해 주셔서! 힘들어도 눈물을 참고 열심히 했습니다..!
</br></p>
<p>저는</p>
<ul>
<li>Home</li>
<li>회원가입/로그인</li>
<li>Chatgpt페이지</li>
<li>Signlanguage to chatgpt 페이지</li>
</ul>
<p>중에서 Chatgpt 페이지를 담당했습니다!</p>
<p>현재 존재하는 Chatgpt처럼 Chaptgpt에게 질문하면 답변이 오는 형식입니다! 아무래도 원래 있는 chatgpt가 자꾸 생각나서, 저도 대화하는 형태로 웹페이지를 구성하였습니다!
보여드리고 싶은데, 차차 수정하면서 다시 올려보도록 하겠습니다!</p>
</br>

<p>사실 저희 조 중에는 웹 개발을 해보신 분이 없어서 정말 다들 힘들어하셨어요..ㅎㅎ
정말 마지막 단위 테스트부터 통합 테스트까지 끝내고 최종본을 배포하기 직전까지 계속해서 수정했습니다. 다른 조들 중에는 전날 끝내신 분들도 있더라고요! 정말 대단하신 거 같아요.
이제 전체 공유회 시간에 다른 조들 페이지도 구경하고 순위를 매기는데 확실히 프런트가 정말 중요하다는 것을 배웠습니다. 다들 기능이 거의 같아서 그런지 확실히 보이는 것이 예쁜 조들이 높은 점수를 가져가시더라고요. 빅프로젝트 할 때도 프런트 부분을 열심히 해야겠다 다짐했습니다!</p>
</br>

<hr>
<h2 id="🍚-맛집-추천">🍚 맛집 추천</h2>
<h3 id="✔️-gts버거-분당정자점">✔️ GTS버거 분당정자점</h3>
<blockquote>
<ul>
<li>매일 10:30 - 22:20</li>
<li>경기 성남시 분당구 불정로87번길 4 1층 일부호</li>
<li>GTS 치즈버거 7,900</li>
</ul>
</blockquote>
<p><img src="https://velog.velcdn.com/images/harii-in/post/a1e7725c-32b4-4f29-abd6-6c9cb557db09/image.png" alt=""></p>
<p>조원이 먹어보고 싶다고 해서 GTS 버거를 드디어 먹어보았습니다!
배달 예정이 약 1시간 정도 걸린다고 해서 일찍 시켰는데, 30분 만에 와서 점심시간이 될 때까지 기다리다 보니 감자튀김이 다 식어버려서 너무 아쉬웠습니다..
하지만 버거도 감자튀김도 다 식어버렸지만! 버거 하나는 정말 맛있었습니다! 가격은 사실 좀 수제 버거다 보니까 사악한 면이 있지만, 한 번쯤 먹어볼 만한 거 같아요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 5기 모집!]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-5%EA%B8%B0-%EB%AA%A8%EC%A7%91</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-5%EA%B8%B0-%EB%AA%A8%EC%A7%91</guid>
            <pubDate>Mon, 27 Nov 2023 19:01:13 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/harii-in/post/b0b3e91c-d341-42ae-a832-2684cdbd7f6d/image.png" alt=""></p>
<p>제가 4기를 지원했던게 엊그제 같은데, 벌써 5기를 모집하는 순간이 왔네요!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/b41dd515-58e4-4634-af68-35d14e7b9647/image.png" alt="">
사전 설명회가 필요하시다면, 
위 QR링크를 사용해서 신청하시면 될 것 같습니다!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/45686df2-1d84-42f9-9ada-95fad626c6a9/image.png" alt="">
KT AIVLE SCHOOL의 장점이 전국 어디서나 참여할 수 있다는 거 같아요.
저는 비록 대전에 대학교를 다니면서 서울/경기권에 지원했습니다!
그래도 프로젝트 기간을 제외하고는 대전/대구/서울 어디서든지 제가 집중할 수 있는 공간에서 진행하였습니다! 이러한 부분들을 잘 숙지하시고 좋은 결정을 내리시면 될 거 같아요!</p>
<p>또 이 프로그램을 진행하면서 AI를 활용하고 데이터를 만져볼 수 있는 기회뿐만 아니라
새로운 사람들을 만나고, 그 사람들과 따로 스터디나 프로젝트를 진행할 수 있다는 점이 저는 제일 큰 장점이라고 생각해요.
프로젝트를 통해 많이 성장했지만, 저에게는 새로운 사람들과 공모전이나 어떠한 목표를 위해 프로젝트를 한다는 게 큰 용기였습니다. 절대 후회하지 않고, 잘 시작했다!라고 생각이 듭니다 ㅎㅎ
매일매일 9-6로 수업 듣는데 힘들지만! 그만큼 또 얻는 게 있으리라 생각했기에 시작할 수 있었고, 후회하지 않습니다!
그리고 이 분야의 부트 캠프는 사실 거의 없고, 또 벌써 5기를 모집할 만큼 많은 시행착오도 겪었기에, 5기 분들은 또 더 좋은 질의 수업과 프로젝트를 진행하실 수 있을 거라 생각됩니다.</p>
<p><strong><em>궁금한 점이 있다면 언제든 댓글 주세요! 곰곰이 생각해 보고 또 찾아보고 답변드리겠습니다!</em></strong></p>
<hr>
<p><img src="https://velog.velcdn.com/images/harii-in/post/e1c111fe-6a49-4cce-a2e1-03e181cdc9bc/image.png" alt="">
친구추천 이벤트!!
제 에이블 아이디도 적어도 되나요? ㅎㅎ
제 에이블 아이디는 <strong>a041048</strong> 입니다!
10명 추천하면 선물도 10개라니! 많이 탐나네요 ㅎㅎ</p>
<p>지원 자격은 다음과 같습니다!
<img src="https://velog.velcdn.com/images/harii-in/post/74780cbd-f55e-497f-9a71-49c287276497/image.png" alt="">
지역 추천제! 졸업 예정자분들은 학과 홈페이지 한 번씩 보시면 좋을 거 같아요!
저는 이런 게 있는지 몰랐거든요! 물론 지원하려는 지역이 달라서 해당되지는 않았을 겁니다!!
본인이 다니는 대학교에 있는 지역에 지원하고 싶다! 하시면 지역 추천제를 노려보는 거 좋을 거 같습니다! 뭐든지 아는 것이 힘이니까요! 사용할 수 있는 수단은 다 써보자고요!</p>
<hr>
<p><img src="https://velog.velcdn.com/images/harii-in/post/f64c4f63-ac99-44dd-8a7b-98b170d703bc/image.png" alt=""></p>
<p>다음은 커피차 이벤트입니다!!</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/166aaed0-1d92-4735-8541-f9359a36dff1/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/67780072-0113-4b78-b72e-21d566fd0029/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>요즘 대학교에 커피차 이벤트 굉장히 많은 거 같아요.
학교에 있으면 종종 커피차 이벤트 덕분에 음료 마시는 경우가 있는데 너무 좋더라고요!
에이블 스쿨 인스타그램 팔로우하고 피드 작성 인증하면 KT 에이블 스쿨이 커피를 드립니다!
다들 한 잔씩 마셔요!! 선착 200분!!! 우리 학교에도 오는데, 저도 가고 싶네요!!!</p>
<p>참고로 에이블스쿨 인스타그램은 <strong>@aivlestory</strong>입니다!!
인스타그램에도 다양한 소식들이 업로드되어 있으니까! 팔로우 하면서 다양한 소식도 보고 가세요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 1차 에이블데이★]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</guid>
            <pubDate>Mon, 27 Nov 2023 18:33:17 GMT</pubDate>
            <description><![CDATA[<h1 id="🎉-1차-aivle-day-🎉">🎉 1차 AIVLE DAY! 🎉</h1>
<h3 id="일정">일정</h3>
<p><strong>AICE Associate - 특강 - 랜선 회식 순으로 진행되었다!</strong></p>
<h3 id="aice-associate">AICE Associate</h3>
<p>사실 오픈북이라 걱정 반 자신감 반이었다!
시험 대비도 했었고, 그래도 혹시나 싶어서 시험 3-4일 전부터 하루에 하나씩 시험 대비 때 했던 것들을 질문만 보고 손으로 다시 적어보았다.
시험 때 찾아보면서 하면 되지만, 시험 준비할 때 몇 가지 새롭게 알게 된 것들이나, 그 문제의 흐름을 머리에 잡고 시험을 보고 싶었다.
시험 대비 때 열심히 했다면 무난하게! 통과할 수 있었을 것 같다 ㅎㅎ
그래서 그런지 무난하게 통과!! 1시간 반 시험이였지만, 1시간 만에 다 풀고 점심시간을 아주 길~~게 가질 수 있었다 ㅎㅎ</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/eb9bcf82-b167-4af8-894d-159e3cc324eb/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/e13978e3-df38-43aa-9463-3d60b3431088/image.png" alt=""></th>
</tr>
</thead>
</table>
</br>

<h3 id="코딩-마스터스-시상">코딩 마스터스 시상</h3>
<p><img src="https://velog.velcdn.com/images/harii-in/post/80f12525-076b-4c23-9962-0d2932088779/image.png" alt=""></p>
<p>23.08.21. ~ 23.09.15. 4주동안 1차 코딩 마스터스가 진행됐었다!!
사실 나는 100문제 다 푸는 그랜드 마스터가 목표였지만, 어림도 없지..
학교생활, 에이블, 이것저것 하느라 정신없이 살다 보니 알고리즘 공부가 멀어지고 머리가 굳어버렸다...
하지만 진짜 꾸역꾸역 주변 분들께 여쭤가면서 하다 보니 70문제 도달!!
다행히 마스터로 끝내게 되었습니다!! 짝짝짝..!!
그랜드 마스터는 키보드, 마스터는 마우스를 선물로 받았습니다!!
블루투스 키보드 필요했는데.. 너무 아쉽습니다!!
다음번에는 꼭 그랜드 마스터!! 하고 싶습니다!!
(현재 2차 코딩 마스터스 진행 중인데, 너무너무 어렵네요 ㅠㅠ)
제 마우스는 로지텍 M650인데, 아직 제 마우스는 멀쩡해서, 나중에 써봐야겠어요!
그리고 받은 오픈 배지!!
git에 쓸 수 있으면 좋겠지만 ㅠ linkedin에 사용해야겠습니다!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/2d957e34-b3bf-4321-bf35-10fa7c55a3b3/image.png" alt=""></p>
</br>

<h3 id="랜선-회식">랜선 회식</h3>
<p>드디어! 랜선 회식입니다! 사실 어떻게 진행되는지 궁금했습니다!
에이블 데이를 위해 며칠 동안 열려있던 &#39;나를 찾아줘&#39; 패들렛입니다!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/831b89f7-50cf-4546-9e0f-0016e8b1cc29/image.png" alt=""></p>
<p>나중에는 매우 변질된 모습이긴 하였지만.. 서로 칭찬과 고마운 점, 친해지고 싶은 마음 표현하는 게 너무 보기 좋았습니다!! 더더 친해지면 좋겠네요!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/ba7607a7-7c0d-4635-80a6-ac6b8e88c469/image.png" alt="">
매니저님을 맞춰라!부터 시작해서 한 분씩 지금까지 중에 활동이나 느낀 점을 말하는 시간까지!!
다들 낯을 많이 가리시는 거 같지만, 조금씩이라도 목소리를 들어볼 수 있어서 좋았습니다!!</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/34f55099-83f8-4740-8727-9f30c4bf7318/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/fcf0a05d-c3f8-42fb-90ee-3822b1292f3f/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>매니저님이 틈틈이 이전까지 진행해 주셨던 퀴즈들!!</td>
<td></td>
</tr>
<tr>
<td>정말 재밌었습니다!! 딱 잠이 올 때!를 어떻게 아시는 건지!</td>
<td></td>
</tr>
<tr>
<td>매니저님 덕분에 불태우면서 매번 열심히 퀴즈를 풀고 정신을 차렸습니다!!</td>
<td></td>
</tr>
<tr>
<td>제가 뭐가 제일 재밌었는지 기억이 안 난다고 했는데 ㅠㅠ 너무 전부 다!! 재밌어서!! 하나만 고르기에는 그 순간에 벙쪘던 거 같습니다!! 정말 정말 재밌었습니다 매니저님!ㅎㅎ</td>
<td></td>
</tr>
<tr>
<td><img src="https://velog.velcdn.com/images/harii-in/post/52987e25-f08c-40b7-bdf5-1f24e68912c2/image.png" alt=""></td>
<td></td>
</tr>
<tr>
<td>아, 이제야 말하지만 저는 이 문제가 가장 재미있었습니다!!</td>
<td></td>
</tr>
<tr>
<td>서로 겹치면 안 되기 때문에 저는 네이버 국어사전 20 페이지에서 찾았던 기억이 있네요..ㅎㅎ</td>
<td></td>
</tr>
<tr>
<td>덕분에 제일 머릿속에 제대로 기억하는 문제였습니다 ㅎㅎ</td>
<td></td>
</tr>
</tbody></table>
<hr>
<p>벌써 절반이 지났다는 게 많이 놀랍습니다.. 점점 빅프로젝트가 다가온다는 것도 믿기지 않고요. 앞으로도 열심히 해서 좋은 성과를 들고 잘 마무리할 수 있었으면 좋겠습니다!
다들 파이팅!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 6차 미니 프로젝트]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-6%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-6%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Mon, 27 Nov 2023 17:37:35 GMT</pubDate>
            <description><![CDATA[<h2 id="📢-6차-미니-프로젝트">📢 6차 미니 프로젝트</h2>
<h3 id="⭐-aivle-school-faq-chatbot">⭐ AIVLE School FAQ ChatBot</h3>
<p><strong><em>목표: Aivle School 지원 질문, 답변 챗봇 만들기</em></strong>
</br></p>
<h2 id="0-배경-및-문제-정의">0. 배경 및 문제 정의</h2>
<h3 id="챗봇의-유용성">챗봇의 유용성</h3>
<ul>
<li>이용자는 챗봇을 통해 시간 절약, 사용자 경험 개선, 접근성 제고 가능<ul>
<li>인터넷이 접속되며 시간과 장소에 제약 없이 서비스 이용 가능함에 따라 대기 시간이나 방문시간 절약</li>
</ul>
</li>
<li>디지털 서비스.기기의 이용 환경(혹은 사용자 경험) 개선<ul>
<li>추가적인 앱이나 프로그램 설치 없이 온.오프라인 서비스 이용 가능</li>
</ul>
</li>
<li>정보역량에 관계 없이 원하는 결과 획득<ul>
<li>일상적인 대화 방식으로 쉽게 접근하여 정보 수집 가능</li>
</ul>
</li>
</ul>
<h3 id="pain-point">PAIN POINT</h3>
<p><strong>Aivle School 지원자들의 단순 반복 문의에 따른 업무 부담 증가</strong>
교육 운영담당자는 단순 반복 문의에 따른 업무 피로도 증대, 제한된 시간과 인력으로 인한 응대업무 한계 존재</p>
<ul>
<li>교육 운영담당: 지원자들의 단순 반복 문의에 대해 늘어나고 있어, 업무 효율이 낮고 부담이 크다!</li>
<li>교육 지원자: 교육 관련 문의를 위해 메일로 요청했는데, 너무 오래 걸려 답답하다!</li>
</ul>
<h2 id="1-데이터-탐색-및-전처리">1. 데이터 탐색 및 전처리</h2>
<h3 id="데이터셋">데이터셋</h3>
<table>
<thead>
<tr>
<th>일상대화</th>
<th>챗봇데이터</th>
</tr>
</thead>
<tbody><tr>
<td><img src="https://velog.velcdn.com/images/harii-in/post/8035b07b-621c-43fa-a567-75991d69c33a/image.png" alt=""></td>
<td><img src="https://velog.velcdn.com/images/harii-in/post/215852c4-609c-4945-b5df-16c649ff784a/image.png" alt=""></td>
</tr>
</tbody></table>
<ul>
<li>일상대화: 일상적인 질문과 답변</li>
<li>챗봇데이터: 에이블스쿨 지원 Q&amp;A</li>
<li>두 데이터 셋을 통합하여 사용 → 약 1300여개</li>
</ul>
<h4 id="질문-별-문장-길이글자-수를-추출하여-분포">질문 별 문장 길이(글자 수)를 추출하여 분포</h4>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/3a5e6d5f-9efd-4ecf-8660-a1c79f0ed17a/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/a6362034-4aa1-421c-bfa8-d02750ec3e85/image.png" alt=""></th>
</tr>
</thead>
</table>
<ul>
<li>문장 길이도 상당히 짧다.</li>
<li>대부분 60자 이내이고, 평균적으로 18자 정도이다.</li>
<li>일상대화를 0, Q&amp;A를 1로 지정 시 일상대화의 경우 평균 10자, 챗봇데이터의 경우 평균 23자 정도이다.</li>
</ul>
<h4 id="intent">intent</h4>
<p><img src="https://velog.velcdn.com/images/harii-in/post/057ba165-291b-4c72-97a2-a76e176824f8/image.png" alt=""></p>
<ul>
<li>30 intent까지가 일상대화에 대한 intent 그 이후는 챗봇데이터에 대한 intent이다.</li>
<li>보시다시피, 32 intent가 유독 많은 것을 볼 수 있다.</li>
<li>이 부분을 어떻게 해야할지 생각할 필요가 있다.</li>
</ul>
<h4 id="py-haspell">py-haspell</h4>
<p><strong>네이버 맞춤법 검사기를 이용한 파이썬용 한글 맞춤법 검사 라이브러리</strong>
<img src="https://velog.velcdn.com/images/harii-in/post/921b72c1-9dff-4a4a-a6c1-e6d8a731319b/image.png" alt=""></p>
<ul>
<li>따라서 A에 대한 Q를 출력해야하다보니, Q와 A에 맞춤법 검사기를 사용하면 좋을 거 같다고 생각했다.<ul>
<li>데이터의 일관성 - 동일한 의미를 가진 단어나 구문이 다르게 쓰여져 있으면, 이를 통일시킴으로써 모델이 더욱 정확하게 학습할 수 있을 것이라 생각했다.</li>
<li>잘못된 정보의 최소화 -  맞춤법 검사기를 사용해 철자나 문장 구조를 수정하기에, 데이터에 포함된 잘못된 정보를 줄일 수 있다고 생각했다.</li>
</ul>
</li>
</ul>
</br>

<h2 id="2-aivle-스쿨-지원-질문-답변-챗봇-만들기">2. Aivle 스쿨 지원 질문, 답변 챗봇 만들기</h2>
<h2 id="챗봇1">챗봇1</h2>
<h3 id="word2vec을-활용하여-머신러닝-모델링">Word2Vec을 활용하여 머신러닝 모델링</h3>
<pre><code class="language-python">tokenized_sentences = [sentence.split() for sentence in clean_train.tolist()]

# Skip-gram: 중심에 있는 &#39;타겟&#39; 단어로부터 주변의 &#39;문맥&#39; 단어들을 예측
# CBOW: 주변의 &#39;문맥&#39; 단어들을 가지고, 그 중심에 있는 &#39;타겟&#39; 단어를 예측하는 방식

from gensim.models import Word2Vec

# Word2Vec 모델 생성
wv_model = Word2Vec(
    sentences = tokenized_sentences,
    vector_size = 100,
    window=5,
    min_count = 1,
    sg = 1
    )

# &#39;train&#39;과 &#39;test&#39; 데이터셋의 &#39;Q&#39; 컬럼에 있는 각 문장을 토큰화
train[&#39;Q&#39;] = train[&#39;Q&#39;].apply(lambda x : tokenize(&#39;mecab&#39;, x).split())
test[&#39;Q&#39;] = test[&#39;Q&#39;].apply(lambda x : tokenize(&#39;mecab&#39;, x).split())

# 학습 데이터의 문장들을 Word2Vec 모델을 사용하여 벡터화
train_data_vecs = get_dataset(train[&#39;Q&#39;], wv_model, 100)
test_data_vecs = get_dataset(test[&#39;Q&#39;], wv_model, 100)

# X와 y 데이터 분리
x = train_data_vecs
y = train[&#39;intent&#39;].values

# Train-Test split
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size=0.2, random_state=42, stratify=y)</code></pre>
<h4 id="lightgbm">LightGBM</h4>
<pre><code class="language-python"># LightGBM 분류기 생성
lgbm_model = LGBMClassifier()

# 학습
lgbm_model.fit(x_train, y_train)
lgbm_model.score(x_val, y_val)

# 예측 및 검증
y_pred = lgbm_model.predict(x_val)

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_val, y_pred)
print(&#39;Validation Accuracy: &#39;, accuracy)
# Validation Accuracy:  0.5188284518828452</code></pre>
<h4 id="randomforest">RandomForest</h4>
<pre><code class="language-python"># RandomForest
from sklearn.ensemble import RandomForestClassifier

# 학습
rf_model = RandomForestClassifier()
rf_model.fit(x_train, y_train)
rf_model.score(x_val, y_val)

# 예측 및 검증
y_pred = rf_model.predict(x_val)

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_val, y_pred)
print(&#39;Validation Accuracy: &#39;, accuracy)

# Validation Accuracy:  0.46443514644351463</code></pre>
<p><img src="https://velog.velcdn.com/images/harii-in/post/e5cb7338-692b-414e-80cc-85e3c92e335b/image.png" alt=""></p>
<h3 id="챗봇-함수-만들기">챗봇 함수 만들기</h3>
<pre><code class="language-python">def get_answer1(question):
    # token = twitter.morphs(question)
    token = tokenize(&#39;mecab&#39;, question)
    input_q = get_dataset([token], wv_model, 100)
    answer_list = train.loc[train[&#39;intent&#39;] == lgbm_model.predict(temp)[0], &#39;A&#39;].unique()
    answer_prob = train.loc[train[&#39;intent&#39;] == lgbm_model.predict(temp)[0], &#39;A&#39;].value_counts(normalize=True).values

    return np.random.choice(answer_list, 1, p=answer_prob)[0]


print(get_answer1(&#39;노트북 사양이 어떻게 되나요?&#39;))</code></pre>
<h4 id="test-데이터에-대해-성능-측정">test 데이터에 대해 성능 측정</h4>
<p>성능이 비교적 좋았던 LightGBM 사용</p>
<pre><code class="language-python">x_test = test_data_vecs
y_test = test[&#39;intent&#39;].values

lgbm_model.score(x_test, y_test)
# 0.330188679245283</code></pre>
<p>성능이 떨어지는 것을 볼 수 있다..</p>
<h2 id="챗봇2">챗봇2</h2>
<h3 id="type-분류-모델링lstm">type 분류 모델링(LSTM)</h3>
<h4 id="데이터-준비">데이터 준비</h4>
<pre><code class="language-python"># 각각의 토큰에 인덱스 부여하는 토크나이저 선언
tokenizer = Tokenizer()

# .fit_on_texts 이용하여 토크나이저 만들기
tokenizer.fit_on_texts(clean_train_questions)

# 전체 토큰의 수 확인
print(&quot;전체 토큰의 수:&quot;, len(tokenizer.word_index))

# 전체 토큰의 수가 vocab 사이즈가 됨
vocab_size = len(tokenizer.word_index) + 1  # &lt;PAD&gt; 때문에 +1
print(&quot;Vocab size:&quot;, vocab_size)

# fit_on_texts을 위에서 한번만 해도 되지만, vocab 사이즈를 확인하고 줄이거나 하는 시도를 할 수도 있기에 다시 수행

# .texts_to_sequences : 토크나이즈 된 데이터를 가지고 모두 시퀀스로 변환
train_sequences = tokenizer.texts_to_sequences(clean_train_questions)
test_sequences = tokenizer.texts_to_sequences(clean_test_questions)

# 각 토큰과 인덱스로 구성된 딕셔너리 생성
word_index = tokenizer.word_index

# &lt;PAD&gt; 는 0으로 추가
word_index = {k:(v+1) for k,v in word_index.items()}
word_index[&quot;&lt;PAD&gt;&quot;] = 0

max_len = 30

# pad_sequences 함수를 이용하여 시퀀스 데이터로 변환
train_padded = pad_sequences(train_sequences, maxlen=max_len)
test_padded = pad_sequences(test_sequences, maxlen=max_len)

train[&#39;type&#39;].unique()
# array([0, 1])

y_train = train[&#39;type&#39;]
y_test = test[&#39;type&#39;]</code></pre>
<h4 id="문장별-토큰-수의-탐색적-분석">문장별 토큰 수의 탐색적 분석</h4>
<p><img src="https://velog.velcdn.com/images/harii-in/post/a0b72905-2eed-416c-8f73-18932da788e9/image.png" alt=""></p>
<ul>
<li>문장별 토큰이 가장 큰 것이 57개 입니다.</li>
<li>문장이 짧기 때문에 MAX_SEQUENCE_LENGTH는 정하지 않아도 되지만, 그러나 분포를 보고 적절하게 자릅시다. ▶ 30개면 충분할 거 같다!</li>
</ul>
<h4 id="모델링">모델링</h4>
<p>토크나이징 한 데이터를 입력으로 받아
Embedding 레이어와 LSTM 레이어를 결합하여 이진 분류 모델링을 수행</p>
<pre><code class="language-python"># 임베딩 차원 설정
embedding_dim = 128

# LSTM 노드 수 설정
lstm_units = 64

# 모델 구성
dmodel = Sequential()
dmodel.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=embedding_dim, input_length=max_len))
dmodel.add(LSTM(lstm_units))
dmodel.add(Dense(1, activation=&#39;sigmoid&#39;))

# 모델 컴파일
dmodel.compile(loss=&#39;binary_crossentropy&#39;, optimizer=&#39;adam&#39;, metrics=[&#39;accuracy&#39;])

# 모델 요약 출력
dmodel.summary()

# 모델 학습
history = dmodel.fit(train_padded, y_train, epochs=10, batch_size=32, validation_split=0.2)

# 예측 수행
predictions = dmodel.predict(test_padded)

# 예측 결과를 0과 1로 변환
predictions = [1 if pred &gt; 0.5 else 0 for pred in predictions]

from sklearn.metrics import accuracy_score

# 성능 평가
accuracy = accuracy_score(y_test, predictions)
print(f&#39;Accuracy: {accuracy * 100:.2f}%&#39;)

# Accuracy: 100.00%</code></pre>
<p>이번에는 100%!!
도대체 뭐지 싶었다.</p>
<h3 id="fasttext-모델-생성">FastText 모델 생성</h3>
<pre><code class="language-python">from gensim.models.fasttext import FastText
import gensim.models.word2vec

# 모델 생성
ft_model = FastText(sentences = x_train,
                 min_count = 1,
                 vector_size = 100,
                 window = 5)

x_train = clean_train_questions.apply(lambda x: get_sent_embedding(ft_model, 100, x))
x_test = clean_test_questions.apply(lambda x: get_sent_embedding(ft_model, 100, x))

x_train = np.array(x_train.tolist())
x_test = np.array(x_test.tolist())

y_train_type = train[&#39;type&#39;].values
y_test_type = test[&#39;type&#39;].values

y_train_intent = train[&#39;intent&#39;].values
y_test_intent = test[&#39;intent&#39;].values

intent_clf = LGBMClassifier()
intent_clf.fit(x_train, y_train_intent)
intent_clf.score(x_test, y_test_intent)

test_input = train.loc[600, &#39;Q&#39;]
test_answer = train.loc[600, &#39;A&#39;]

temp = tokenizer.texts_to_sequences([test_input])
temp = pad_sequences(temp, maxlen=max_len, padding=&#39;pre&#39;, truncating=&#39;post&#39;)

type_pred = dmodel.predict(temp)

type_pred
#1/1 [==============================] - 0s 23ms/step
#array([[0.9997847]], dtype=float32)

# 이미 토큰화된 리스트를 임베딩 벡터로 변환
temp = get_sent_embedding(ft_model, 100, test_input)

from sklearn.metrics.pairwise import cosine_similarity

cosine_similarity(temp.reshape(1, -1), x_train).argmax()    # 531

def get_intent2(question):
    type_input = tokenizer.texts_to_sequences([test_input])
    type_input = pad_sequences(type_input, maxlen=max_len, padding=&#39;pre&#39;, truncating=&#39;post&#39;)
    type_pred = np.round(dmodel.predict(type_input.reshape(1, 30), verbose=0)[0][0])

    ft_vecs = get_sent_embedding(ft_model, 100, question)

    temp_df = train[train[&#39;type&#39;] == type_pred].reset_index(drop=True)
    q_vecs = temp_df[&#39;Q&#39;].apply(lambda x: get_sent_embedding(ft_model, 100, x))
    q_vecs = np.array([list(x) for x in q_vecs])

    answer_idx = cosine_similarity(ft_vecs.reshape(1, -1), q_vecs).argmax()
    intent_pred = temp_df.loc[answer_idx, &#39;intent&#39;]

    return intent_pred

y_pred = [get_intent2(x) for x in test[&#39;Q&#39;].tolist()]
accuracy_score(test[&#39;intent&#39;].values, y_pred)
# 0.29245283018867924</code></pre>
<h2 id="질문에-대한-답변-비교해보기">질문에 대한 답변 비교해보기</h2>
<pre><code class="language-python">def get_answer1(question):
    token = tokenize(&#39;mecab&#39;, question)
    input_q = get_dataset([token], wv_model, 100)
    intent = lgbm_model.predict(input_q)[0]
    answer_list = train.loc[train[&#39;intent&#39;] == intent, &#39;A&#39;].unique()
    answer_prob = train.loc[train[&#39;intent&#39;] == intent, &#39;A&#39;].value_counts(normalize=True).values

    return np.random.choice(answer_list, 1, p=answer_prob)[0], intent

def get_answer2(question):
    type_input = tokenizer.texts_to_sequences([test_input])
    type_input = pad_sequences(type_input, maxlen=max_len, padding=&#39;pre&#39;, truncating=&#39;post&#39;)
    # type_pred = np.round(dmodel.predict(type_input.reshape(1, 30), verbose=0)[0][0])
    type_pred = (dmodel.predict(type_input.reshape(1, 30), verbose=0)[0][0] &gt; 0.5).astype(int)

    ft_vecs = tokenize(&#39;mecab&#39;, question)
    ft_vecs = get_sent_embedding(ft_model, 100, ft_vecs)

    temp_df = train[train[&#39;type&#39;] == type_pred].reset_index(drop=True)
    q_vecs = temp_df[&#39;Q&#39;].apply(lambda x: get_sent_embedding(ft_model, 100, x))
    q_vecs = np.array([list(x) for x in q_vecs])

    answer_idx = cosine_similarity(ft_vecs.reshape(1, -1), q_vecs).argmax()
    intent_pred = temp_df.loc[answer_idx, &#39;intent&#39;]

    # print(type_pred, answer_idx, intent_pred)
    return temp_df.loc[answer_idx, &#39;A&#39;], intent_pred</code></pre>
<pre><code class="language-python">question = &#39;에이블스쿨 지원하고 싶어요&#39;

ans1, int1 = get_answer1(question)
ans2, int2 = get_answer2(question)
# ans3, int3 = get_answer3(question)

# print(&quot;=&quot;*120)
print(&quot;질문 :&quot;, question)
print(&quot;=&quot;*120)
print(&quot;챗봇1 답변 :&quot;, int1, ans1)
print(&quot;=&quot;*120)
print(&quot;챗봇2 답변 :&quot;, int2, ans2)
print(&quot;=&quot;*120)
# print(&quot;챗봇3 답변 :&quot;, int3, ans3)
# print(&quot;=&quot;*120)</code></pre>
<p><img src="https://velog.velcdn.com/images/harii-in/post/259b4ce8-8d8e-4d11-b7c5-7bf22208a796/image.png" alt=""></p>
</br>

<hr>
<h2 id="❗마치며">❗마치며</h2>
<p>사실 챗봇2부터는 꽤 어려웠다.
이전에 같은 프로젝트 한 다른 에이블 기수분들의 블로그가 아니였다면 한참 더 헤맸을 거 같다.
그래서 이번에 내 코드를 올린 이유이기도 하다.
내 코드가 좋은 코드다!는 아니지만, 이런코드도 있다!를 보여주고 싶었다.
사실 validation때 0.5넘게 나와서 나름 0.5넘게 나와서 기대를 했는데, test하면 0.3, 심하면 0.2까지 내려가는 것을 보고 너무 어이없고 화가 났다.
다른 분들 보니까 validation때 0.6, test 시 0.4로 내려가신 분도 있다고 들었다.
다들 어쩜 그리 잘하는지...나도 더욱 공부하고 분발해야겠다.</p>
<p>그리고 점점 하면서 느끼는데, 나는 자연어 처리가 나름 재미있는거 같다.
더 잘해보고 싶은데, 어떻게 해야할까?
더욱 찾아보고 공부하는 방법 뿐이겠지만, 다음에는 이 모델을 왜 쓰는지, 어떻게 하며 성능을 더 높일 수 있는지 생각해봐야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 5차 미니 프로젝트]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-5%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-5%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Mon, 30 Oct 2023 18:06:20 GMT</pubDate>
            <description><![CDATA[<h2 id="📢-5차-미니-프로젝트">📢 5차 미니 프로젝트</h2>
<h3 id="⭐-스마트폰-센서-데이터-기반-인간-행동-인식-분류">⭐ 스마트폰 센서 데이터 기반 인간 행동 인식 분류</h3>
<p><strong><em>목표: 스마트폰 기반의 센서 데이터를 활용해 동작을 분류하는 모델을 완성</em></strong>
</br></p>
<h2 id="1-탐색적-데이터-분석">1. 탐색적 데이터 분석</h2>
<p><code>data.shape</code> : (5881, 563)
칼럼이 너무 많다! 이걸 어떻게 분석해야 할까 생각하다가, 변수 중요도 상위 10개, 하위 10개만 살펴보자고 생각했다.</p>
<h3 id="변수중요도-상위-10개-하위-10개-확인">변수중요도 상위 10개, 하위 10개 확인</h3>
<p>랜덤 포레스트는 튜닝 없이 하이퍼 파라미터의 기본값으로도 적절한 성능의 모델을 생성하므로, 랜덤 포레스트를 이용하여 변수 중요도 추출</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/2d5cccd3-510e-406d-b57d-abbe60f2b415/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/530811bd-f04e-48ef-aa58-dc9d09826fd3/image.png" alt=""></th>
</tr>
</thead>
</table>
</br>

<p><span style="background-color: rgba(242,179,188,0.5)">target = <strong><em>&#39;Activity&#39;</em></strong> </span></p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/c211f992-fcd4-460d-96a5-cdc5cf95f5ee/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/474115fa-ef40-465e-81ca-624677cbd809/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>6개의 클래스로 구분하여 분류를 진행하므로 타깃 값 분포를 확인해 보았다.</td>
<td></td>
</tr>
<tr>
<td>countplot을 봤을 때는 데이터 분포가 고르다고 느끼지 못했으나, pieplot을 봤을 때 이 정도면 데이터 분포는 고른 거 같다고 생각했다.</td>
<td></td>
</tr>
</tbody></table>
</br>

<h2 id="2-기본-모델링">2. 기본 모델링</h2>
<p>사실 1번 파일에서 변수 중요도를 8개의 관점에서 뽑고 하나의 데이터프레임으로 합친 후 저장하였다. 그러나, 5차 프로젝트의 경우 AICE를 제외하고 3일 동안 진행되었다. 더욱이, 본 프로젝트는 캐글을 제외한 이틀 동안 진행되었다. 이러한 이유로, 변수중요도를 다양한 관점에서 뽑아 저장한 데이터 프레임은 사용되지 않았다.</p>
<h3 id="스케일링">스케일링</h3>
<p>데이터프레임의 최댓값과 최솟값을 확인해 보았을 때, -1과 1임을 확인했다. 따라서 -1 ~ 1 사이에 모든 데이터가 분포하므로, 스케일링의 필요성을 느끼지 못했다.</p>
<h3 id="머신러닝">머신러닝</h3>
<p><span style="background-color: rgba(242,179,188,0.5)">best_model: <strong>Logistic Regression Model Accuracy: 0.9855564995751912</strong> </span></p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/20a7d3c5-e74a-4181-ba2a-fd768fcabf28/image.png" alt=""></p>
<ul>
<li>다른 분들의 의견을 들었을 때는 LGBM이나 XGBoost 성능이 더 좋았다는 의견도 있었습니다!</li>
<li>보시다시피 전체적으로 성능이 좋은 것을 볼 수 있었어요!</li>
</ul>
<h3 id="위-n개-변수를-선택하여-모델링-수행-및-성능-비교">위 N개 변수를 선택하여 모델링 수행 및 성능 비교</h3>
<p>아무래도, 기본적으로 성능이 좋다 보니, 칼럼을 어느 정도까지 줄여도 성능이 좋을까 하고 확인할 필요가 있었습니다!</p>
<h4 id="변수-중요도-상위-n개를-10개씩-증가시켰을-때-가장-성능이-좋았던-모델">변수 중요도 상위 N개를 10개씩 증가시켰을 때 가장 성능이 좋았던 모델:</h4>
<p><span style="background-color: rgba(242,179,188,0.5)"><strong>Best Model with top 320 features</strong>, Accuracy: 0.9881053525913339 </span></p>
<h4 id="변수-중요도-상위-n개를-10개씩-증가시켰을-때-early-stoppig-기법을-사용">변수 중요도 상위 N개를 10개씩 증가시켰을 때, Early Stoppig 기법을 사용:</h4>
<p>이전 3번의 반복에서 정확도가 0.01 이내로 변동하지 않으면 반복을 중단하고, 그 시점의 가장 높은 정확도를 가진 모델을 최종 모델로 선택</p>
<p><span style="background-color: rgba(242,179,188,0.5)"><strong>Best Model with top 30 features</strong>, Accuracy: 0.9804587935429057 </span></p>
<h2 id="3-단계별-모델링">3. 단계별 모델링</h2>
<h3 id="단계-1-정적동적-행동-분류-모델">단계 1: 정적/동적 행동 분류 모델</h3>
<pre><code>def label_activity(activity):
    if activity in [&#39;STANDING&#39;, &#39;SITTING&#39;, &#39;LAYING&#39;]:
        return 0
    else:
        return 1

data[&#39;Activity_dynamic&#39;] = data[&#39;Activity&#39;].apply(label_activity)
new_data[&#39;Activity_dynamic&#39;] = new_data[&#39;Activity&#39;].apply(label_activity)
data.head()</code></pre><p><span style="background-color: rgba(242,179,188,0.5)">Best Model: <strong>LogisticRegression</strong> with Accuracy: 0.9821580288870009 </span>
<img src="https://velog.velcdn.com/images/harii-in/post/dce1e07e-bd28-400a-80fe-07d2bb018a25/image.png" alt=""></p>
<h3 id="단계2-1--정적-동작-세부-분류">단계2-1 : 정적 동작 세부 분류</h3>
<ul>
<li>정적 행동(Laying, Sitting, Standing)인 데이터 추출</li>
<li>Laying, Sitting, Standing 를 분류하는 모델을 생성</li>
<li>몇가지 모델을 만들고 가장 성능이 좋은 모델을 선정</li>
</ul>
<pre><code># 정적인 데이터 추출
static_data = data.loc[data[&#39;Activity_dynamic&#39;] == 0]
static_data.head()</code></pre><p><span style="background-color: rgba(242,179,188,0.5)">Best Model: <strong>RandomForestClassifier</strong> with Accuracy: 0.9752704791344667</span>
<img src="https://velog.velcdn.com/images/harii-in/post/bb64e68e-2d29-4336-bdae-fb8064b08861/image.png" alt=""></p>
<h3 id="단계2-2--동적-동작-세부-분류">단계2-2 : 동적 동작 세부 분류</h3>
<ul>
<li>동적 행동(Walking, Walking Upstairs, Walking Downstairs)인 데이터 추출</li>
<li>Walking, Walking Upstairs, Walking Downstairs 를 분류하는 모델을 생성</li>
<li>몇가지 모델을 만들고 가장 성능이 좋은 모델을 선정<pre><code># 동적인 데이터 추출
dynamic_data = data.loc[data[&#39;Activity_dynamic&#39;] == 1]
dynamic_data.head()</code></pre><span style="background-color: rgba(242,179,188,0.5)">Best Model: <strong>LogisticRegression</strong> with Accuracy: 0.9905660377358491</span>
<img src="https://velog.velcdn.com/images/harii-in/post/d826a5e0-069d-4e7d-b88d-48e257da0800/image.png" alt=""></li>
</ul>
<h3 id="분류-모델-합치기">분류 모델 합치기</h3>
<ul>
<li>두 단계 모델을 통합하고, 새로운 데이터(test)에 대해서 최종 예측결과와 성능평가가 나오도록 함수로 만들기</li>
<li>데이터 파이프라인 구축 : test데이터가 로딩되어 전처리 과정을 거치고, 예측 및 성능 평가 수행</li>
</ul>
<pre><code class="language-python">from sklearn.model_selection import train_test_split
import numpy as np

x = data.drop(columns=&#39;Activity&#39;)
y1 = data[&#39;Activity&#39;]
y_dynamic = y1.copy().map(lambda x: 1 if x in [&#39;WALKING&#39;, &#39;WALKING_UPSTAIRS&#39;, &#39;WALKING_DOWNSTAIRS&#39;] else 0)

static_indices = y1.isin([&#39;LAYING&#39;, &#39;SITTING&#39;, &#39;STANDING&#39;])
x_static = x[static_indices]
y_static = y1[static_indices]

acting_indices = y1.isin([&#39;WALKING&#39;, &#39;WALKING_UPSTAIRS&#39;, &#39;WALKING_DOWNSTAIRS&#39;])
x_act = x[acting_indices]
y_act = y1[acting_indices]

x_train, x_valid, y_train, y_valid = train_test_split(x, y1, test_size=0.2, random_state=0)
x_train_dynamic, x_valid_dynamic, y_train_dynamic, y_valid_dynamic = train_test_split(x, y_dynamic, test_size=0.2, random_state=0)
x_train_act, x_valid_act, y_train_act, y_valid_act = train_test_split(x_act, y_act, test_size=0.2, random_state=0)
x_train_static, x_valid_static, y_train_static, y_valid_static = train_test_split(x_static, y_static, test_size=0.2, random_state=0)

model_dynamic = RandomForestClassifier()
model_dynamic.fit(x_train_dynamic, y_train_dynamic)

model_act = RandomForestClassifier()
model_act.fit(x_train_act, y_train_act)

model_static = RandomForestClassifier()
model_static.fit(x_train_static, y_train_static)

y_pred_dynamic = model_dynamic.predict(x_valid)
y_pred_act = model_act.predict(x_valid)
y_pred_static = model_static.predict(x_valid)
y_pred_total = []

for i in range(len(y_pred_dynamic)):
    if y_pred_dynamic[i] :
        y_pred_total.append(y_pred_act[i])
    else:
        y_pred_total.append(y_pred_static[i])
accuracy_dynamic = accuracy_score(y_valid, y_pred_total)
print(f&quot;Accuracy = {accuracy_dynamic}&quot;)</code></pre>
</br>

<hr>
<h2 id="kaggle-competition">Kaggle Competition</h2>
<p>짧게 적어보자면..</p>
<h3 id="1-timestamp">1. timestamp</h3>
<p><img src="https://velog.velcdn.com/images/harii-in/post/45076607-f05d-4e80-930f-0922f6047df0/image.png" alt="">
나는 처음 &#39;스마트폰 센서 데이터 기반 인간 행동 인식 분류&#39;에서 timestamp는 그다지 필요 없는 칼럼이라 생각하고 칼럼 자체를 삭제했었다. 삭제하고 모델 성능을 높이려고 아무리 노력해도 다른 사람들의 성능을 따라잡을 수 없었다. 그래서 그럼 timestamp를 한 번 넣어볼까?라고 생각하고, 넣었더니.. 헉!! 성능이 말도 안 되게 높아졌다!! 이것이 이 프로젝트의 사기였음을..
사실 왜 성능이 좋아지는지 잘 모르겠지만, 연도에 따라 사용하는 사람의 수도 많아졌을 수도 있고, 등등의 이유와, 시간대에 따라 직장인들이 앉아있거나, 퇴근 출근 시간대에는 비교적 많이 움직일 테니까, 성능을 높이는데 중요한 feature가 될 수 있었다고 생각한다.</p>
<h3 id="2-결측치">2. 결측치</h3>
<p>test 데이터를 확인했을 때, 결측치가 하나도 없어서, 처음에는 결측치를 다 삭제했다. 하지만 성능을 어떻게 조금만이라도 더 올려볼까 고민하다가 각 칼럼의 mean 값으로 넣어봤더니 좀 더 높아진 것을 확인해 볼 수 있었다.
결측치 mean과 모델을 &#39;RandomForestClassifier&#39;이나 &#39;KNeighborsClassifier&#39;을 했을 때, accuracy가 0.9833 정도의 결과가 나왔다.
다른 더 점수가 높은 분들께 여쭤보니 해당 칼럼의 median 값으로 결측치를 채우고, &#39;LGBMClassifier&#39;를 사용했더니 높게 나왔다고 말씀해 주셨다. 또 다른 분은 결측치를 &#39;스플라인 보간법&#39;을 사용하셨다고 한다. 결측치.. 크게 생각 못 했지만, 이것도 성능을 좌지우지한다는 것을 느꼈다..</p>
</br>

<hr>
<h2 id="🍚-맛집-추천">🍚 맛집 추천</h2>
<h3 id="✔️-라이라이">✔️ 라이라이</h3>
<blockquote>
<ul>
<li>매일 11:00 - 22:30</li>
<li>경기 성남시 분당구 내정로11번길 10-4 1층</li>
<li>유니짜장면 8,000</li>
<li>등심탕수육 소 23,000</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/8b439a81-1843-41aa-a34a-1dcdde6fb987/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/fd1cc0a1-c382-455f-b2a1-8488b6d0f57f/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>짜장면이 너무 먹고 싶어서, 중국집 어떻냐고 여쭤보니 다들 찬성해 주셔서 다녀왔습니다!</td>
<td></td>
</tr>
<tr>
<td>이 집은 탕수육 튀김옷이 찹쌀? 인 것으로 알고 있습니다! 아주아주 맛있습니다!!! 다들 꼭 드세요!! 화붐은 간짬뽕 맛집이지만, 전 짬뽕을 안좋아하는 관계로 이 집에이 제일이네요..ㅎㅎ</td>
<td></td>
</tr>
<tr>
<td>짜장면도 아주 맛있고요, 간짜장, 삼선짜장에 계란 프라이도 올라갑니다!! 다들 맛있다고 하시더라고요 ㅎㅎ 이날 제가 속이 안 좋아서, 제대로 못 먹었는데.. 다음번에 다시 또 가봐야겠습니다!</td>
<td></td>
</tr>
<tr>
<td>아 사진은... 먹느라 자꾸 까먹어서 주변 분들 나눠드리고, 짜장면 섞으려다 찍었습니다..ㅎㅎ 이제는 같은 팀원 분들이 제 velog를 챙겨주시네요.. 팀원분들 아니었으면 사진도 못 찍었을 거 같아요.. 감사합니다 ㅎㅎ</td>
<td></td>
</tr>
</tbody></table>
<h3 id="✔️-대세신당동즉석쌀떡볶이양푼이매운갈비찜국물닭발">✔️ 대세신당동즉석쌀떡볶이&amp;양푼이매운갈비찜국물닭발</h3>
<blockquote>
<ul>
<li>매일 11:00 - 22:30</li>
<li>경기 성남시 분당구 불정로77번길 14</li>
<li>신당동 즉석 쌀 떡볶이 15,000</li>
<li>매운갈비찜 중 33,000</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/ba26631c-a9eb-4fbd-834f-b4ee94c2bbba/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/875697eb-450b-408e-a8f1-37ea505f0338/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>여기 오기 전날, 떡볶이가 먹고 싶어서, 근처에 떡볶이집이 있나 찾던 와중에 떡볶이랑 매운 갈비찜을 동시에 파는 집이 있었습니다! 아침에 팀원들을 보자마자 우리 이 집 가는 거 어떻냐고 여쭤봤는데 다들 흔쾌히 좋다고 해주셔서!! 감사합니다!!
떡볶이보다는 매운 갈비찜이 더 맛있었어요! 저희는 기본 맛을 먹었지만, 매워하시는 분들도 계셨고, 저는 맵지는 않았어요! 다음번에는 이거 큰 거 시켜서 밥이랑 같이 먹고 싶네요 ㅎㅎ 다른 집들보다는 조금 아쉬웠지만...! 그래도 맛있고 배부르게 잘 먹고 왔습니다!</p>
</br>

<hr>
<h2 id="❗마치며">❗마치며</h2>
<p>사실 캐글을 진행하는 날, 학교 중간고사 일정이 있어서, 두 시에 조퇴를 했습니다. 하지만 이번에는 개인으로 진행하는 캐글... 50등 안에 너무나도 들고 싶더라고요.. 그래서 서울에서 대전으로 가는 고속버스 안에서 열심히 했지만, 아쉽게도 80등! 너무너무 아쉬웠지만, 캐글 끝나고 다른 분들께 어떻게 진행하셨는지 여쭤보면서, 제가 생각하지 못했던 부분들을 깨달았습니다! 다음번에는 더 잘하고 싶네요! 결측치를 어떻게 채우는지, 어떤 모델을 사용할 건지 정말 깊고 다양하게 생각해 보는 것이 좋을 거 같습니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] AICE 대비]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-AICE-%EB%8C%80%EB%B9%84</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-AICE-%EB%8C%80%EB%B9%84</guid>
            <pubDate>Mon, 30 Oct 2023 18:05:50 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-5차-미니-프로젝트---aice-대비">📌 5차 미니 프로젝트 - AICE 대비</h2>
<p><img src="https://velog.velcdn.com/images/harii-in/post/dfbc3154-42ad-44cb-b91e-bb66345c5942/image.png" alt=""></p>
<p>미니프로젝트 5차 10.23.-10.27. 중 10월 23, 24 이틀 동안 AICE 대비를 했습니다!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/4cd42011-636e-4bac-bf69-1bf7a9edfdb9/image.png" alt=""><img src="https://velog.velcdn.com/images/harii-in/post/106637be-b7f6-4a71-a87d-04a633fb2b2a/image.png" alt=""></p>
<p>내용도 복습할 겸, AICE 샘플문항을 통해 정리해보고자 합니다!</p>
<hr>
<h3 id="1-파이썬-패키지-불러오기">1. 파이썬 패키지 불러오기</h3>
<pre><code>import sklearn as sk
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt</code></pre><h3 id="2-데이터-파일-읽어오기">2. 데이터 파일 읽어오기</h3>
<p><code>df = pd.read_json(path)</code>
<code>df = pd.read_csv(path)</code></p>
<h3 id="3-분포도-알아보기">3. 분포도 알아보기</h3>
<h4 id="count-plot">count plot</h4>
<pre><code>sns.countplot(data = df, x = &#39;Address1&#39;)
plt.show()

idx_address = df.loc[df[&#39;Address1&#39;] == &#39;-&#39;].index
df.drop(idx_address, inplace = True)</code></pre><p><img src="https://velog.velcdn.com/images/harii-in/post/324a149d-38d3-4810-8362-fe4eee909172/image.png" alt=""></p>
<h4 id="joint-plot">joint plot</h4>
<pre><code>sns.jointplot(x=&#39;Time_Driving&#39;, y=&#39;Speed_Per_Hour&#39;, data=df)
plt.show()</code></pre><p><img src="https://velog.velcdn.com/images/harii-in/post/e5c93615-d412-4374-8ff3-0a8ab43bc389/image.png" alt="이상치 확인"></p>
<h3 id="4-jointplot-그래프에서-시속-300이-넘는-이상치-삭제">4. jointplot 그래프에서 시속 300이 넘는 이상치 삭제</h3>
<pre><code>idx_out = df.loc[df[&#39;Speed_Per_Hour&#39;] &gt; 300].index
df.drop(idx_out, inplace = True)
df_temp = df.copy()</code></pre><h3 id="5-결측치-처리">5. 결측치 처리</h3>
<pre><code>print(df_temp.isnull().sum())
df_na = df_temp.dropna()
print(df_na.isnull().sum())</code></pre><h3 id="6-불필요한-변수-삭제">6. 불필요한 변수 삭제</h3>
<pre><code>df_del = df_na.drop([&#39;Time_Departure&#39;, &#39;Time_Arrival&#39;], axis = 1)</code></pre><h3 id="7-원-핫-인코딩one-hot-encoding">7. 원-핫 인코딩(One-hot encoding)</h3>
<pre><code>df_del.info()
object_cols = df_del.select_dtypes(include=&#39;object&#39;).columns
df_preset = pd.get_dummies(df_del, columns=object_cols)</code></pre><p><span style="background-color: rgba(242,179,188,0.5)"> 원하는 데이터타입 컬럼 추출: select_dtypes</span></p>
<h3 id="8-target-컬럼에-대해-데이터-셋-분리">8. target 컬럼에 대해 데이터 셋 분리</h3>
<pre><code>from sklearn.model_selection import train_test_split

target = &#39;Time_Driving&#39;
y = df_preset[target]
X = df_preset.drop(&#39;Time_Driving&#39;, axis=1)

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)</code></pre><h3 id="9-머신러닝-및-성능-평가">9. 머신러닝 및 성능 평가</h3>
<pre><code>from sklearn.tree import DecisionTreeRegressor

model = DecisionTreeRegressor(max_depth=5, min_samples_split=3, random_state=120)
model.fit(X_train, y_train)</code></pre><pre><code>from sklearn.metrics import mean_absolute_error

y_pred = model.predict(X_valid)
dt_mae = mean_absolute_error(y_valid, y_pred)</code></pre><h3 id="10-딥러닝">10. 딥러닝</h3>
<pre><code>import tensorflow as tf
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Activation, Dropout, BatchNormalization
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.utils import to_categorical

tf.random.set_seed(1)</code></pre><ul>
<li>모델링하고 학습을 진행<pre><code># 여기에 답안코드를 작성하세요.
from sklearn.metrics import mean_squared_error
</code></pre></li>
</ul>
<p>model = Sequential([
    Dense(64, activation=&#39;relu&#39;,
          input_shape=(X_train.shape[1],)),
    BatchNormalization(),
    Dropout(0.2),</p>
<pre><code>Dense(32, activation=&#39;relu&#39;),
BatchNormalization(),
Dropout(0.2),

Dense(16, activation=&#39;relu&#39;),
BatchNormalization(),
Dropout(0.2),

Dense(1)</code></pre><p>])</p>
<p>model.compile(optimizer = &#39;adam&#39;,
              loss = &#39;mean_squared_error&#39;)</p>
<p>history = model.fit(X_train, y_train,
                    batch_size = 16,
                    epochs = 30,
                    validation_data=(X_valid, y_valid))</p>
<pre><code>
&lt;/br&gt;
- Matplotlib 라이브러리 활용해서 학습 mse와 검증 mse를 그래프로 표시
</code></pre><p>mse = history.history[&#39;loss&#39;]
val_mse = history.history[&#39;val_loss&#39;]</p>
<p>epochs = range(1, len(mse) + 1)</p>
<p>plt.plot(epochs, mse, &#39;b&#39;, label=&#39;mse&#39;)
plt.plot(epochs, val_mse, &#39;r&#39;, label=&#39;val_mse&#39;)</p>
<p>plt.title(&#39;Model MSE&#39;)
plt.xlabel(&#39;Epochs&#39;)
plt.ylabel(&#39;MSE&#39;)
plt.legend()
plt.show()</p>
<pre><code>![](https://velog.velcdn.com/images/harii-in/post/e517fde1-70ad-4045-baac-59c840139e59/image.png)

&lt;/br&gt;
&lt;피드백&gt; &lt;/br&gt;
- loss=&#39;mean_squeared_error&#39;해서 metrics 안써도 자동으로 되네요!

---
### 🧐 후기
AICE 처음이라 걱정 많이했지만!
세 개의 프로젝트? 연습을 진행하며 생각보다 괜찮겠구나! 그래도 지금까지 열심히 공부했구나를 느꼈다!! 그래도 중간중간 원하는 데이터타입 컬럼 추출이나 팀 같은 것들을 팀원들끼리 주고 받으면서 재미있었다!!
연습한 것 보다 어렵게 문제가 나온다고 하니, 시험 전에 세 개 다시 해보고, 추가적으로 공부를 좀 더 해야할 거 같다! 그리고 점점 나만의 머신러닝, 딥러닝 적는 방법이 생기는 거 같아 뭔가 뿌듯하고...신기하고...!

+) 우리 팀원들...익명으로 하니까 말 되게 많아졌어요...

![](https://velog.velcdn.com/images/harii-in/post/d5d0a625-f5ba-4146-9e0f-0b101cf1b43a/image.png) |![](https://velog.velcdn.com/images/harii-in/post/8ba88876-a7fa-4d8e-95e0-a21e11b1f889/image.png)
---|---|</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 4차 미니 프로젝트 - 2]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-4%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-4%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</guid>
            <pubDate>Mon, 30 Oct 2023 18:05:23 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-4차-미니-프로젝트">📌 4차 미니 프로젝트</h2>
<p>⭐ AIVLE-EDU 1:1 문의 유형 분류하기
<strong><em>목표: AIVLE SCHOOL TUTORING CENTER의 업무 고도화를 위해 1:1 질문 게시판에 업로드 되는 에이블러들의 질문 유형을 자동으로 분류해주는 모델을 만들고 성능을 개선한다.</em></strong></p>
<h2 id="1-데이터-분석-및-전처리">1. 데이터 분석 및 전처리</h2>
<p>먼저 데이터는 각 문의 내용에 대해 label이 &#39;코드2&#39;, &#39;웹&#39;, &#39;이론&#39;, &#39;코드1&#39;, &#39;시스템 운영&#39;, &#39;원격&#39;로 분류되어 있다. 문의 내용 중 길이가 제일 긴 인덱스는 2561번으로 길이가 6012이다.</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/5006c3cb-6074-4695-a34f-796ce5259c3b/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/e5583cb7-71e5-4434-afdc-9f45a10fab4f/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>이 프로젝트를 어떻게 진행할까 팀원들과 이야기를 하면서 영어, 특수 문자, 숫자를 모두 제거하고 &#39;NNG(일반명사)&#39;, &#39;NNP(고유명사)&#39; 품사에 해당하는 단어만 추출하여 분석을 진행하기로 결정했다. 추가로, 한글 단어 중에서 한 글자로 이루어진 단어를 확인해 보니, 제대로 처리되지 않은 조사나 이해하기 어려운 단어가 많았다. 이를 보완하기 위해 한 글자 단어를 삭제한 데이터프레임과 그렇지 않은 데이터프레임 두 가지를 만들어 분석을 진행했습니다. </p>
<pre><code class="language-python">#  &#39;NNG(일반명사)&#39;, &#39;NNP(고유명사)&#39; 품사만 추출
def extract_nouns(text, target = [&#39;NNG&#39;,&#39;NNP&#39;], to_list=True):
    # [&#39;NNG&#39;,&#39;NNP&#39;,&#39;NP&#39;,&#39;NNB&#39;,&#39;NNBC&#39;,&#39;NR&#39;]

    nouns_list = []
    pod_text = mecab.pos(text)
    for s in pod_text:
        if s[1] in target:
            if to_list:
                nouns_list.append(s[0])
            else:
                nouns_list.append(s)

    return nouns_list</code></pre>
<p><img src="https://velog.velcdn.com/images/harii-in/post/ed4491e9-66cc-4f85-a31a-068afad23596/image.png" alt="">
텍스트 데이터를 처리하는 과정에서 중복 단어를 제거할지에 대한 고민을 많이 했다. 그러나 단어가 여러 번 반복될수록 그 문장에서 해당 단어가 중요한 요소로 작용할 수 있을 거라 생각했다. 단어의 빈도가 그 중요성을 나타내는 경우가 많기 때문에, 중복 단어를 제거하지 않기로 결정했다.</p>
</br>

<h4 id="벡터화---n-grams">벡터화 - N-grams</h4>
<p>벡터화는 문서를 벡터로 변환하는 과정이다. 여기서 n-gram은 글자/단어를 n 개씩 묶는 것이다. 만약에 n을 2로 설정한다면 &#39;토마토&#39;를 [&#39;토마&#39;, &#39;마토&#39;, &#39;토토&#39;] 이렇게 두 글자씩 묶어준다. 이 과정을 통해 문장의 문맥을 이해하는 데 도움이 된다고 한다.</p>
<pre><code class="language-python"># 확인
ngram_list = []

for f in f_nouns:
    tmp = []
    two_gram = zip(f, f[1:])
    for i in two_gram:
        tmp.append(i[0] + i[1])
    ngram_list.append(tmp)

print(ngram_list)</code></pre>
<p>TF-IDF는 단어의 빈도수에 따라 가중치를 부여한다. 따라서 TF-IDF 값이 높은 단어일수록 해당 문서에서 중요한 단어로 간주된다.
n-gram에 TF-IDF를 적용함으로써 텍스트 데이터를 더욱 효과적으로 분석하고 이해할 수 있다고 한다...
사실 이 부분은 완전히는 이해하지 못했다. 차차 공부하다 보면 더 잘 알겠지..</p>
<pre><code class="language-python">def identity_tokenizer(tokens):
    return tokens

count_vectorizer = CountVectorizer(tokenizer=identity_tokenizer, lowercase=False)
count_mecab_vectorizer = CountVectorizer(tokenizer = mecab_tokenizer, lowercase=False)

x_tr_counts = count_vectorizer.fit_transform(X_tr[&quot;noun&quot;])
x_val_counts = count_vectorizer.transform(X_val[&quot;noun&quot;])
x_te_counts = count_vectorizer.transform(X_te)

x_tr_mecab_counts = count_mecab_vectorizer.fit_transform(X_tr[&quot;noun&quot;])
x_val_mecab_counts = count_mecab_vectorizer.transform(X_val[&quot;noun&quot;])
x_te_mecab_counts = count_mecab_vectorizer.transform(X_te)

transformer = TfidfTransformer()
x_tr_tfidf = transformer.fit_transform(x_tr_mecab_counts)
x_val_tfidf = transformer.transform(x_val_mecab_counts)
x_te_tfidf = transformer.transform(x_te_mecab_counts)

tfidf_vectorizer = TfidfVectorizer(tokenizer=identity_tokenizer, lowercase=False)
x_tr_tfidfv = tfidf_vectorizer.fit_transform(X_tr[&quot;noun&quot;])
x_val_tfidfv = tfidf_vectorizer.transform(X_val[&quot;noun&quot;])
x_te_tfidfv = tfidf_vectorizer.transform(X_te)

print(&quot;Count Vectorizer Vocabulary size : &quot;, len(count_vectorizer.vocabulary_))
print(&quot;Count Vectorizer(Mecab tokenizer) Vocabulary size : &quot;, len(count_mecab_vectorizer.vocabulary_))
print(&quot;TF-IDF Vectorizer(Mecab tokenizer) Vocabulary size : &quot;, len(tfidf_vectorizer.vocabulary_))</code></pre>
<h4 id="임베딩---sequence">임베딩 - Sequence</h4>
<p>주로 단어나 문장 등의 시퀀스 데이터를 저차원의 벡터로 임베딩하는 과정을 의미한다.</p>
<pre><code class="language-python">%%time
import tensorflow as tf
import numpy as np
import tensorflow.keras as keras
from keras.preprocessing import sequence
from keras.preprocessing import text
TOP_K = 5000
MAX_SEQUENCE_LENGTH = 500

X_mor_tr_str = X_tr[&quot;noun&quot;].apply(lambda x: &#39; &#39;.join(x))
X_mor_val_str = X_val[&quot;noun&quot;].apply(lambda x: &#39; &#39;.join(x))

X_mor_tr = X_tr[&quot;noun&quot;]
X_mor_val = X_val[&quot;noun&quot;]

tokenizer = text.Tokenizer(num_words=TOP_K, char_level=False)
tokenizer.fit_on_texts(X_mor_tr)
X_mor_tr_seq = tokenizer.texts_to_sequences(X_mor_tr)
X_mor_val_seq = tokenizer.texts_to_sequences(X_mor_val)

max_length = len(max(X_mor_tr_seq, key=len))
if max_length &gt; MAX_SEQUENCE_LENGTH:
    max_length = MAX_SEQUENCE_LENGTH

print(max_length)
X_mor_tr_seq = sequence.pad_sequences(X_mor_tr_seq, maxlen=max_length)
X_mor_val_seq = sequence.pad_sequences(X_mor_val_seq, maxlen=max_length)</code></pre>
<h4 id="임베딩---word2vec">임베딩 - Word2Vec</h4>
<p>이 부분은 애초에 함수가 제공되었다.</p>
<pre><code class="language-python"># 아래 함수는 제공합니다.
def get_sent_embeddings(model, embedding_size, tokenized_words):

    # 단어 임베딩 및 n_words의 크기가 0인 feature_vec 배열을 0으로 초기화합니다.
    # 또한 model.wv.index2word를 사용하여 Word2Vec 모델의 어휘에 단어 세트를 생성합니다.
    feature_vec = np.zeros((embedding_size,), dtype=&#39;float32&#39;)
    n_words = 0
    index2word_set = set(model.wv.index_to_key)

    # 토큰화된 문장의 각 단어를 반복하고 Word2Vec 모델의 어휘에 존재하는지 확인합니다.
    # 그렇다면 n_words가 증가하고 단어의 임베딩이 feature_vec에 추가됩니다.
    for word in tokenized_words:
        if word in index2word_set:
            n_words += 1
            feature_vec = np.add(feature_vec, model.wv[word])

    # Word2Vec 모델의 어휘에 있는 입력 문장에 단어가 있는지 확인합니다.
    # 있다면 feature_vec를 n_words로 나누어 입력 문장의 평균 임베딩을 구합니다.
    if (n_words &gt; 0):
        feature_vec = np.divide(feature_vec, n_words)

    return feature_vec
def get_dataset(sentences, model, num_features):

    # 각 문장에 대한 임베딩을 보유할 dataset이라는 빈 목록을 초기화합니다.
    dataset = list()

    # 문장의 각 문장을 반복하고 앞에서 설명한 get_sent_embeddings() 함수를 사용하여 문장에 대한 평균 임베딩을 생성합니다.
    # 결과 문장 임베딩이 데이터 세트 목록에 추가됩니다.
    for sent in sentences:
        dataset.append(get_sent_embeddings(model, num_features, sent))

    # 루프에서 생성된 문장 임베딩을 sent_embedding_vectors라는 2차원 배열에 쌓습니다.
    sent_embedding_vectors = np.stack(dataset)

    return sent_embedding_vectors</code></pre>
<h2 id="2-모델링">2. 모델링</h2>
<p>머신러닝에는 보통 벡터화된 데이터를, 딥러닝에는 임베딩된 데이터를 넣어줘야 한다.</p>
<h3 id="머신러닝">머신러닝</h3>
<ul>
<li>N-gram으로 전처리한 데이터를 이용하여 3개 이상의 Machine Learning 모델 학습 및 성능 분석
<img src="https://velog.velcdn.com/images/harii-in/post/cce54557-e882-4a64-9fba-16ee724a5d07/image.png" alt=""></li>
</ul>
<h3 id="딥러닝">딥러닝</h3>
<ul>
<li>Sequence로 전처리한 데이터를 이용하여 DNN, 1-D CNN, LSTM 등 3가지 이상의 deep learning 모델 학습 및 성능 분석
<code>DNN Model Accuracy: 0.684636116027832</code>
<code>1D CNN Model Accuracy: 0.5053908228874207</code>
<code>LSTM Model Accuracy: 0.43800538778305054</code></li>
</ul>
<p><img src="https://velog.velcdn.com/images/harii-in/post/9853bad5-c9eb-47f5-9ec8-9f2022e4c6a9/image.png" alt=""></p>
<h2 id="3-kaggle">3. Kaggle</h2>
<p>내 성능은 꽝이었지만! 다들 전처리를 다양하게 나눠서 한 덕분에 결론적으로 우리 팀은 27개 조 중에 10등으로 마무리할 수 있었다!
캐글 처음이지만.. 너무 재밌어!!</p>
<p><img src="https://velog.velcdn.com/images/harii-in/post/a4e2ebe6-f7c5-49b2-83fb-86ffb705bceb/image.png" alt=""><img src="https://velog.velcdn.com/images/harii-in/post/d0727c4a-0626-4718-9ed5-e12e6a28e3bb/image.png" alt=""></p>
</br>

<hr>
<h2 id="🍚-맛집-추천">🍚 맛집 추천</h2>
<p>이번 미프 때는 비도 오고 그래서... 배달을 시켜 먹었습니다!
아무래도, 음식물이 남으면 안 되니까, 안 생기는 음식으로 최대한 골랐습니다!</p>
<h3 id="✔️-노모어피자-분당정자점">✔️ 노모어피자 분당정자점</h3>
<blockquote>
<ul>
<li>매일 11:00 - 24:00</li>
<li>경기 성남시 분당구 정자일로 135 3차 푸르지오 시티 D동 1층 103호</li>
<li>스윗 고구마 피자 L 27,800</li>
<li>콰트로 치즈 피자 L 28,800</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/84c8475c-69ed-4034-b0ab-ae0c5b8f6ae1/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/2bf685b6-eade-4e83-900e-49915b395e47/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>피자.. 오랜만에 먹었는데 정말 맛있네요!</td>
<td></td>
</tr>
<tr>
<td>아무래도 피자가 먹다 보면 좀 느끼한 점이 있어서, 보통 하나는 좀 매운 거 해야 하는데, 고구마랑 치즈 피자로 해서, 마지막엔 많이 느끼했답니다..</td>
<td></td>
</tr>
<tr>
<td>다음부터는 생각하고 시키기... 하지만!!! 맛있었다❤️</td>
<td></td>
</tr>
</tbody></table>
<h3 id="✔️-두찜-분당미금점">✔️ 두찜 분당미금점</h3>
<blockquote>
<ul>
<li>매일 10:45 - 22:45</li>
<li>경기 성남시 분당구 미금로 251 상가동 106호</li>
<li>까만 찜닭, 빨간 찜닭 23,800</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/87b0870d-4413-4472-bfc0-22b4fea0a9d5/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/6161b8fd-8d7e-4411-9b6c-1ac594412c9f/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>전날 피자로 다들 니글니글해져서 그런지 이번에는 꼭 밥! 먹기로 했습니다!</td>
<td></td>
</tr>
<tr>
<td>뭘 먹다고 고민하다가, 제가 찜닭을 좋아해서 찜닭 어떤지 여쭤봤는데 다들 좋다고 하셔서 두찜 먹기로 했습니다!</td>
<td></td>
</tr>
<tr>
<td>까만 찜닭 2단계, 빨간 찜닭 3단계로 시켜 먹었는데, 생각보다 많이 순해서 다음번에는 한 단계씩 더 높여서 먹기로 했습니다!</td>
<td></td>
</tr>
<tr>
<td>밥이 생각보다 양이 적어 보였는데, 먹다 보니 양은 충분하더라고요! 한 팀이 두 개 시켜서 각자 밥이랑 같이 드시면 아주 풍족하고 배부르게 드실 수 있을 듯합니다! 다음번에 또 먹어야지 ㅎㅎ</td>
<td></td>
</tr>
<tr>
<td>아무래도 시켜 먹으니까, 나가서 먹는 것보다 시간적 여유가 많이 생기더라고요. 안 나가도 되고, 음식 나올 때까지 기다리는 시간이 줄어드니까요. 그래도 어쩔 수 없이 어느 정도 음식물은 생겨서, 자주 시켜 먹진 못할 거 같아요. 그래도 한 번쯤은..?ㅎㅎ</td>
<td></td>
</tr>
</tbody></table>
</br>

<hr>
<h2 id="❗마치며">❗마치며</h2>
<p>나는 &#39;NNG(일반명사)&#39;, &#39;NNP(고유명사)&#39; 품사에 해당하는 단어만 추출하여 분석을 진행했습니다. 하지만 성능은 결과적으로 한국어 뿐만 아니라, 영어와 특수문자를 넣은것이 성능이 제일 좋았습니다! 결론적으로는 역시 데이터가 많을수록 성능이 좋다는거... 정말 열심히 전처리 했으나, 참 어이없고...열불도 나지만, 이렇게 또 하나 배운거겠죠?
제가 다른 프로젝트를 진행하면서 불용어 처리와 맞춤법 검사기!를 사용한 적이 있어서, 이번에도 이렇게 진행해야 할까? 하다가 일단 명사만 추출하는 방법으로만 진행했습니다.
하지만 전체 발표할 때, 1등 팀이 불용어를 진짜로 하나하나 보고 제거하셨고, 2등 팀이 맞춤법 검사기를 사용했다고 들었습니다! 다른 팀들의 발표를 보며, 아! 우리도 할걸!!이라고 생각했지만, 그 팀 분들이 대단하신 거죠 ㅎㅎ 다음번엔 저도 포기하지 않고 집념으로 한 번 제대로 불용어처리 해봐야겠습니다!</p>
<h3 id="참고">참고</h3>
<ul>
<li><p><strong><em>한국어 불용어 처리</em></strong>
<a href="https://bab2min.tistory.com/544">한국어 불용어 리스트 100개</a>
보통 사람들이 만들어 둔 불용어 리스트에서 각자 데이터 프레임을 확인하며 처리해야 할 불용어를 추가하여 처리하는 방법으로 알고 있다.
다른 좋은 방법 있으면 공유 부탁드립니다!🙏🏻</p>
</li>
<li><p><strong><em>한국어 전처리 패키지</em></strong></p>
<pre><code class="language-python"># Py-Hanspell
# 한국어 전처리 패키지
# 네이버 한글 맞춤법 검사기를 바탕으로 만들어진 패키지로써 맞춤법을 고친 문장을 반환
</code></pre>
</li>
</ul>
<p>!pip install git+<a href="https://github.com/haven-jeon/PyKoSpacing.git">https://github.com/haven-jeon/PyKoSpacing.git</a> --no-deps argument</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 4차 미니 프로젝트 - 1]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-4%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-4%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Mon, 30 Oct 2023 18:04:25 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-4차-미니-프로젝트">📌 4차 미니 프로젝트</h2>
<h3 id="⭐-서울시-공공-데이터-기반-서울시-생활인구-예측">⭐ 서울시 공공 데이터 기반, 서울시 생활인구 예측</h3>
<p><strong><em>목표: 서울의 생활인구 데이터를 분석하여, 특정 지역의 생활인구를 파악하고 해당 지역의 생활인구를 예측한다</em></strong></p>
<p><strong>데이터</strong></p>
<ul>
<li>특정 시점을 기준으로 일정시간 동안에 유입, 유출, 이동한 총 인구</li>
<li>생활인구: 특정(조사) 시점에 존재하고 있는 사람의 수</li>
</ul>
<hr>
<h2 id="1-데이터-분석eda">1. 데이터 분석(EDA)</h2>
<p>기본 데이터는 서울시 특정구 특정동의 생활인구 데이터가 주어졌다. train 데이터의 경우 2017년부터 2021년까지의 데이터를 합쳐서 사용하였고, test 데이터의 경우 2022년의 반년치 데이터만 주어졌다.</p>
<p>컬럼은 총 31개였고, 다음과 같다.
<img src="https://velog.velcdn.com/images/harii-in/post/3b781716-007a-47ad-80b8-557d4f2f1dee/image.png" alt="">
이 칼럼들을 보면서 너무 나눠져있는 연령대를 좀 합칠 필요가 있다고 판단했다. 따라서 생애 주기 단계에 맞춰 청소년(13세 이상 19세 미만인 사람), 성인(19세부터 30세까지), 장년(30세부터 45세까지), 중년(45세부터 64세까지), 노인(65세 이상)으로 합침으로써 구분하였다. 따라서 오직 생애 주기로 만 나눈 데이터와, 생애 주기에서 여성과 남성으로 나눈 데이터까지, 총 두 개의 데이터 프레임을 구성하였다.</p>
<p>다음은 시간대별로 &#39;총 생활 인구수&#39;의 변화를 나타내는 그래프이다.
<img src="https://velog.velcdn.com/images/harii-in/post/146e547e-f5bf-40b0-92de-5ea74dd7b5a0/image.png" alt=""></p>
<h2 id="2-데이터-전처리">2. 데이터 전처리</h2>
<ol>
<li>&#39;기준일ID&#39;열을 datetime 형식으로 변경 후 dt.year, dt.month, dt.day, dt.weekday를 진행후 가변수화를 진행하였다. 하지만, 22년 데이터의 경우 반년치 데이터 밖에 없다보니까, 칼럼의 갯수가 맞지 않는 문제가 발생하였다. 따라서 &#39;기준일ID&#39;열은 삭제하고 진행하였다.</li>
<li>shift와 rolling을 이용
원 데이터는 1시간대로 나뉘어진 시계열 데이터이기 때문에 미래시점의 인구를 예측하는 것이다. 따라서 하루 전 그 시간대, 7시간 동안의 이동평균, 3시간전까지의 평균, 바로 직전 1시간 전의 데이터를 가져왔다. <pre><code class="language-python">df_total[&#39;1d예측&#39;] = df_total[&#39;총생활인구수&#39;].shift(24)
df_total[&#39;이동평균 수&#39;] = df_total[&#39;총생활인구수&#39;].rolling(7, min_periods = 1).mean()
data_total[&#39;3h_mean&#39;] = data_total[&#39;총생활인구수&#39;].rolling(3, min_periods = 1).mean()
data_total[&#39;1h_before&#39;] = data_total[&#39;총생활인구수&#39;].shift(1)</code></pre>
<h3 id="3-모델링">3. 모델링</h3>
LinearRegression, RandomForestRegressor, GradientBoostingRegressor, KNeighborsRegressor, XGBRegressor 총 5개 모델로 진행했다.
아래 사진은 GradientBoostingRegressor의 변수 중요도이다. 참고로 왼쪽은 shift와 rolling을 진행한 칼럼만 남겨둔 데이터 프레임에 대한 변수 중요도, 오른쪽은 생애 주기로 합치고 shift와 rolling을 진행한 데이터 프레임이다.
보시다시피, 직전 3시간 전까지의 평균이 아주 높은 변수 중요도를 차지하고 있는 것을 볼 수 있다. 이는 GradientBoostingRegressor이 아닌 다른 모델 또한 마찬가지였다.
그 덕에 전체적으로 좋은 성능이 나왔음을 확인했다.
<span style="background-color: rgba(242,179,188,0.5)">왼쪽 R2-Score: 0.9841506948197996</span>
<span style="background-color: rgba(242,179,188,0.5)">오른쪽 R2-Score: 0.9909533353119533</span></li>
</ol>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/e199f157-d2ba-449d-91df-d4b36ea5fc53/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/98cabb46-63ad-4257-8b74-b6f8d8b9ab5a/image.png" alt=""></th>
</tr>
</thead>
</table>
</br>

<hr>
<h2 id="❗마치며">❗마치며</h2>
<p>사실 시계열 데이터를 다룰 때, shift와 rolling이 중요하다는 점은 알고 있었지만, 오늘처럼 다른 그 어떤 데이터보다, 내가 전처리한 rolling 하나로 성능이 좋게 나왔음을 확인했다. 다음부터는 더더욱 왜?라고 생각하며, shift와 rolling을 진행해야겠다. 이렇게 뭔가 하나하나 배워가는 중...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 2차 미니 프로젝트 - 2]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</guid>
            <pubDate>Mon, 30 Oct 2023 18:00:27 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-2차-미니-프로젝트">📌 2차 미니 프로젝트</h2>
<p>⭐ 장애인 이동권 개선을 위한 장애인 콜택시 대기시간 예측
*<em>💡목표 *</em>
장애인 콜택시를 이용하는 고객들의 불편사항을 개선하고 서비스의 품질을 높이기 위해 콜택시 운행이 종료된 시점에 다음 날의 기상 예보를 바탕으로 기상 상황에 따른 장애인 콜택시의 평균 대기 시간을 예측하고 예상 대기 시간을 제공할 수 있는 모델을 완성하여 교통약자의 이동 편의 증진에 기여한다.</p>
</br>

<h2 id="1-데이터-전처리">1. 데이터 전처리</h2>
<ul>
<li>목표: 전날 저녁, 다음날 평균 대기시간을 예측<pre><code class="language-python"># 익일의 대기시간(waiting time)을 오늘의 데이터를 활용하여 예측 해야하는 대상(target)으로 설정
</code></pre>
</li>
</ul>
<p>target = &#39;waiting_time&#39;
data[&#39;waiting_time_1&#39;] = data[target].shift(-1)</p>
<h1 id="target-변수에-nan이-포함된-행-제거---2022-12-31-행-제거">target 변수에 NaN이 포함된 행 제거 -&gt; 2022-12-31 행 제거</h1>
<p>data.dropna(subset=[&#39;waiting_time_1&#39;], axis=0, inplace=True)</p>
<pre><code>* 날씨 데이터는 실제 측정값이지만, 다음 날에 대한 예보 데이터로 간주
```python
# 익일의 실제 날씨 데이터를 전일에 발표된 예보데이터로 판단
weather[&#39;Date&#39;] = weather[&#39;Date&#39;].shift(1)  # 2012-01-02 -&gt; 2012-01-01</code></pre><ul>
<li>장애인 이동 데이터를 기준으로 날씨 데이터 merge
<code>data = pd.merge(data, weather, on=&#39;Date&#39;, how=&#39;inner&#39;)</code></li>
</ul>
<h3 id="새로운-feature-생성">새로운 feature 생성</h3>
<ul>
<li>날짜와 관련된 변수 추가 - 요일, 월, 계절, 연도<ul>
<li><pre><code class="language-python"># 월을 기반으로 계절 분류
def assign_season(month):
if month in [12, 1, 2]:
  return &#39;Winter&#39;
elif month in [3, 4, 5]:
  return &#39;Spring&#39;
elif month in [6, 7, 8]:
  return &#39;Summer&#39;
else:
  return &#39;Fall&#39;
</code></pre>
</li>
</ul>
</li>
</ul>
<p>data[&#39;year&#39;] = data[&#39;Date&#39;].dt.year                          # 연도
data[&#39;season&#39;] = data[&#39;Date&#39;].dt.month.apply(assign_season)  # 계절</p>
<h1 id="object로-만드는-방법1">Object로 만드는 방법1</h1>
<p>import calendar
data[&#39;month&#39;] = data[&#39;Date&#39;].dt.month      # 월
data[&#39;month&#39;] = data[&#39;month&#39;].apply(lambda x: calendar.month_abbr[x])  # 월 이름으로 만들기 # Jan, Feb, ...
data[&#39;weekday&#39;] = data[&#39;Date&#39;].dt.weekday  # 요일
data[&#39;weekday&#39;] = data[&#39;weekday&#39;].apply(lambda x: calendar.day_abbr[x])  # 요일 이름으로 만들기 # Mon, Tue, ...</p>
<h1 id="categorical로-만들기">categorical로 만들기</h1>
<p>data[&#39;season&#39;] = pd.Categorical(data[&#39;season&#39;], categories=[&#39;Spring&#39;, &#39;Summer&#39;, &#39;Fall&#39;, &#39;Winter&#39;])
data[&#39;month&#39;] = pd.Categorical(data[&#39;month&#39;], categories=[&#39;Jan&#39;, &#39;Feb&#39;, &#39;Mar&#39;, &#39;Apr&#39;, &#39;May&#39;, &#39;Jun&#39;, &#39;Jul&#39;, &#39;Aug&#39;, &#39;Sep&#39;, &#39;Oct&#39;, &#39;Nov&#39;, &#39;Dec&#39;])
data[&#39;weekday&#39;] = pd.Categorical(data[&#39;weekday&#39;], categories = [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;])  # ordered=True : 데이터프레임을 이 기준으로 정렬할건지</p>
<pre><code>
* 공휴일 정보
    * workalender 패키지로 대한민국 공휴일 정보 추가
    * 실제로 휴무일에 해당하지만 라이브러리에 없는 날짜 추가
        * 주말 추가!
```python
# ex
from workalendar.asia import SouthKorea
cal = SouthKorea()

holiday = pd.DataFrame(cal.holidays(2023))</code></pre><ul>
<li><p>7일 이동평균 대기시간
<code>data[&#39;waiting_time_MA7&#39;] = data[&#39;waiting_time&#39;].rolling(7, min_periods = 1).mean()  # min_periods : 최소 데이터수</code></p>
</li>
<li><p>탑승률
<code>data[&#39;ride_rate&#39;] = data[&#39;ride_cnt&#39;] / data[&#39;request_cnt&#39;]</code></p>
</li>
</ul>
</br>

<h2 id="2-탐색적-데이터-분석eda">2. 탐색적 데이터 분석(EDA)</h2>
<p><code>target = &#39;waiting_time&#39;</code></p>
<h3 id="숫자-feature-→-target">숫자 feature → Target</h3>
<table>
<thead>
<tr>
<th align="center">fare</th>
<th align="center">car_cnt</th>
<th align="center">request_cnt</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/273a016e-4ceb-4e38-8788-bf3f828794cf/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/35b7efdc-310a-40ee-9971-d771f6af6980/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/caa4c9fd-336d-48e3-8e07-6f26d95a84a7/image.png" alt=""></td>
</tr>
</tbody></table>
<p>target과 feature의 산점도를 확인했을 때, 두 종류로 나뉘는 듯이 분포가 나왔다. 이 점에 대해 팀원들과 논의하고 확인한 결과, 쉬는 날과 일하는 날로 나뉘기 때문인 것으로 밝혀졌다.</p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/e3b35fc4-75f6-4c2c-9fd0-e7444e8ecff0/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/756e4149-7389-4378-b420-8caf13e0541a/image.png" alt=""></th>
</tr>
</thead>
</table>
</br>

<h3 id="범주-feature-→-target">범주 feature → Target</h3>
<table>
<thead>
<tr>
<th align="center">holiday</th>
<th align="center">season</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/3def37b3-ba9f-4a5f-9e05-a2efb24f0216/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/691845a7-35da-498b-bb60-a2d27a6eed40/image.png" alt=""></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">month</th>
<th align="center">weekday</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/c0819b21-869a-4efc-b532-77c88abf9360/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/76085142-5e5b-4da2-ab64-ebff5efdf9ee/image.png" alt=""></td>
</tr>
</tbody></table>
<h3 id="변수-정리">변수 정리</h3>
<ul>
<li>강한 관계<ul>
<li>7days_mean, ride_rate</li>
</ul>
</li>
<li>중간 관계<ul>
<li>request_cnt, car_cnt</li>
</ul>
</li>
<li>약한 관계<ul>
<li>그 외</li>
</ul>
</li>
</ul>
</br>

<h2 id="3-모델링">3. 모델링</h2>
<ul>
<li>&#39;year&#39;, &#39;season&#39;, &#39;month&#39;, &#39;weekday&#39;, &#39;holiday&#39;에 대해 가변수화 진행</li>
<li>r2 score</li>
</ul>
<table>
<thead>
<tr>
<th align="center">holiday</th>
<th align="center">season</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/ef73d712-e9fd-470d-afd7-348f5584f6ec/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/759e354d-906e-4f86-b815-e4bd3b5d54b6/image.png" alt=""></td>
</tr>
<tr>
<td align="center"><code>DecisionTreeRegressor 7.004</code></td>
<td align="center"><code>DecisionTreeRegressor 7.356</code></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">year</th>
<th align="center">month</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/e007af70-e185-4b73-bfb6-db7bb0793338/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/78ef490a-5920-42a3-9755-af9253baabf3/image.png" alt=""></td>
</tr>
<tr>
<td align="center"><code>DecisionTreeRegressor 7.201</code></td>
<td align="center"><code>DecisionTreeRegressor 6.931</code></td>
</tr>
</tbody></table>
<h3 id="딥러닝">딥러닝</h3>
<p align="center">
<img src = "https://velog.velcdn.com/images/harii-in/post/420276c6-57d3-47c5-8d49-912b21743075/image.png" width="70%">
</p>
`loss: 12.8256`
단순하게 쌓았다고 생각했는데, 이게 맞나 싶긴하다.]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 2차 미니 프로젝트 - 1]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-2%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Mon, 30 Oct 2023 17:59:34 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-2차-미니-프로젝트">📌 2차 미니 프로젝트</h2>
<p>⭐ 공공데이터로, 미세먼지 농도 예측
<strong><em>미션: 1시간 뒤의 미세먼지 농도 예측 머신러닝부터 딥러닝까지 여러 모델 적용하고 성능 향상</em></strong></p>
<h2 id="1-데이터-분석-및-전처리">1. 데이터 분석 및 전처리</h2>
<h3 id="서울-지역의-미세먼지-데이터와-날씨-데이터를-전처리하고-머신러닝-모델-완성">서울 지역의 미세먼지 데이터와 날씨 데이터를 전처리하고 머신러닝 모델 완성</h3>
<ul>
<li>pd.to_datetime으로 날짜/시간 형식 데이터 타입 변환 및 merge</li>
<li>사용하지 않을 변수 제거<ul>
<li>도메인을 찾아보고, 데이터 소개를 보며 미세먼지와 관련있다고 여겨지는 컬럼만 남김</li>
</ul>
</li>
<li>결측치 ffill(결측값을 바로 위 값과 동일하게 변경)로 처리<ul>
<li>1시간 단위로 측정된 시계열 데이터이고, 미세먼지와 날씨 데이터이므로 ffill로 채움</li>
<li>처리하고 남은 결측치는 0으로 채움</li>
</ul>
</li>
<li>모델링에 유용한 변수 추가<ul>
<li>전일 같은 시간(24시간 전) 미세먼지 농도 변수 추가</li>
</ul>
</li>
<li>target: t+1(1시간 후) 시점의 미세먼지 농도 변수</li>
</ul>
<h2 id="2-모델링머신러닝">2. 모델링(머신러닝)</h2>
<table>
<thead>
<tr>
<th align="center"><strong>cv_score.mean()</strong></th>
<th align="center"><strong>r2_score</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/748ff6c7-5ebe-463d-ae75-0c2a259e3ce4/image.png" alt=""></td>
<td align="center"><img src="https://velog.velcdn.com/images/harii-in/post/76140043-e4de-489b-b599-97e5693fd027/image.png" alt=""></td>
</tr>
<tr>
<td align="center">LinearRegression 0.9438</td>
<td align="center">LinearRegression 0.93214</td>
</tr>
</tbody></table>
<p>모델이 1시간 뒤의 값을 예측하는 데 있어 &#39;PM10&#39;이라는 변수의 중요성이 두드러지게 나타났다. 이 변수의 중요도가 특히 높아, 결국 이 값이 모델의 성능을 크게 좌우하는 결정적인 요소로 보인다.
<img src="https://velog.velcdn.com/images/harii-in/post/bc1143af-6ee4-44a4-a051-a6a1784e2430/image.png" alt=""></p>
<hr>
<h2 id="🍚-맛집-추천">🍚 맛집 추천</h2>
<h3 id="✔️-카산도-정자본점">✔️ 카산도 정자본점</h3>
<blockquote>
<ul>
<li>매일 11:00 - 22:00</li>
<li>경기 성남시 분당구 불정로71번길 2 1층</li>
<li>등심카츠정식 13,500원</li>
<li>안심카츠정식 14,500원</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/701e42e8-5731-4551-80e3-115e2e3997e8/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/4d233338-b421-45ba-b8d1-e9e11ff38a3f/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>어쩌다가 먹으러 가게 된 돈까스!!
다들 경양식을 더 좋아하시나요, 일식을 더 좋아하시나요?
둘 다 좋아하는 편이지만, 전 일식을 좀 더 좋아한답니다..!
저는 냉모밀 정식을 먹었습니다! 사실 돈까스가 사이드로 나올 줄 알았는데, 새우 튀김이 나왔습니다! 다른 에이블러님 돈까스도 먹어봤는데, 와.. 돈까스나 새우튀김이나 모두 정말 바삭바삭하고 맛있습니다!! 다음 번에는 냉우동도 먹어보고 싶고, 돈까스 정식도 먹어보고 싶네요!</p>
<h3 id="✔️-화붐신간짬뽕-분당직영점">✔️ 화붐신간짬뽕 분당직영점</h3>
<blockquote>
<ul>
<li>매일 11:00 - 21:00</li>
<li>경기 성남시 분당구 내정로7번길 15 1층</li>
<li>간짬뽕 10,000원</li>
<li>짜장면 5,500원</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/c06e9f5e-bab1-48f3-8b98-aa63adc3d8ca/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/64cb96a0-4618-4e6a-8f65-23c98e95d445/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/8fda9f65-e64f-4304-8797-9beb986f222c/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>한 에이블러님이 엄청 좋아하신 중식당입니다!
제가 짜장면이 땡겨서 먹으러 가게 됐는데, 이름부터 짬뽕집이다 보니, 짜장면보다 짬뽕 맛집!입니다!! 짜장면은 그냥 짜장면과 트러플 짜장면이 있는데, 저는 다음 번에 트러플 짜장면을 먹어봐야겠어요! 뭐가 다를지 궁금하네요!
여기 간짬봉은 흔히 아는 짬뽕과는 확연히 다르고, 맛있다고 하니! 꼭 한 번 드시러 가보세요!</p>
<h3 id="✔️-평이담백뼈칼국수-분당정자점">✔️ 평이담백뼈칼국수 분당정자점</h3>
<blockquote>
<ul>
<li>매주 월요일 정기휴무</li>
<li>11:30 - 21:00</li>
<li>경기 성남시 분당구 불정로77번길 10 1층</li>
<li>뼈칼국수 11, 000</li>
<li>비빔 칼국수 10,000</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/a7c6a806-648b-43f4-a4f1-52aef29e23f7/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/181de874-1e3c-4a26-979c-171de6949914/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/831bf488-3af4-414b-8603-61a7d6889351/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>다시 한 번 먹게된 뼈칼국수! 지난 번과 달리 이번에는 비빔 대신 뼈칼국수를 먹었습니다!! 다른 에이블러님과 반반 나눠 먹었는데, 저는 비빔국수에 한 표! 정확히는 두 음식을 나눠 먹는게 제일 좋은 거 같네요! 짬짜면처럼 반반은 안나올까요?ㅋㅋ
비빔은 다 먹으면 조금 물리는 감이 있고, 뼈칼국수는 심심한데 맛있는? 그런 느낌이라 둘 다 먹는게 조합이 엄청 맛있는 거 같아요! 또 땡기네요 ㅎㅎㅎ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 머신러닝2]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D2</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D2</guid>
            <pubDate>Mon, 30 Oct 2023 17:58:51 GMT</pubDate>
            <description><![CDATA[<h3 id="📌-linear-regression">📌 Linear Regression</h3>
<ul>
<li>최적의 회귀모델<ul>
<li>최선의 회귀모델은 전체 데이터의 오차 합이 최소가 되는 모델을 의미</li>
<li>결국 오차 합이 최소가 되는 가중치 $w_1$와 편향$w_0$을 찾는 것을 의미</li>
</ul>
</li>
</ul>
<h4 id="단순-회귀simple-regression">단순 회귀(Simple Regression)</h4>
<ul>
<li><p>독립변수 하나가 종속변수에 영향을 미치는 선형 회귀</p>
</li>
<li><p><span style="color: red">x값 하나만</span>으로 y값을 설명할 수 있는 경우</p>
</li>
<li><p>회귀식: $\hat{y} = w_0 + w_1x_1$</p>
</li>
<li><p>독립변수의 최선의 가중치와(w_1)와 편향(w_0)을 찾음</p>
</li>
<li><p>모델 학습 후 회귀계수 확인 가능</p>
<ul>
<li><strong><em>coef_</em></strong>: 회귀계수(=가중치)</li>
<li><strong><em>intercept_</em></strong>: 편향</li>
</ul>
</li>
</ul>
<h4 id="다중-회귀multiple-regression">다중 회귀(Multiple Regression)</h4>
<ul>
<li>여러 독립변수가 종속변수에 영향을 미치는 선형 회귀</li>
<li>𝑦 값을 설명하기 위해서는 <span style="color: red">여러 개의 𝑥 값</span>이 필요한 경우</li>
<li>회귀식: $\hat{y} = w_0 + w_1x_1 + \cdots + w_nx_n$</li>
<li>각 독립변수의 최선의 가중치와$(w_1, w_2, \cdots)$와 편향$(w_0)$을 찾음</li>
<li>회귀계수가 여럿이므로 독립변수 이름과 같이 확인하는 것을 권고</li>
</ul>
<h4 id="모델-구현">모델 구현</h4>
<ul>
<li><span style="color: red">회귀 모델에만 사용</span></li>
<li>알고리즘 함수: <span style="color: red">sklearn.linear_model.LinearRegression</span></li>
<li>성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등</li>
</ul>
<hr>
<h3 id="📌-k-nearest-neighbor">📌 K-Nearest Neighbor</h3>
<ul>
<li>k 근접 이웃(가장 가까운 이웃 k개)</li>
<li>학습용 데이터에서 k개의 최근접 이웃의 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘</li>
<li>회귀와 분류에 사용되는 간단한 지도학습 알고리즘</li>
<li>다른 알고리즘에 비해 이해는 쉬우나, 연산속도가 느림</li>
</ul>
<h4 id="scaling">Scaling</h4>
<p>필요성: KNN은 거리 기반 알고리즘이다. k개의 가장 가까운 이웃을 선택한 다음 이러한 이웃을 기반으로 새 관측값에 대한 클래스(분류 문제의 경우)를 할당하거나 값(회귀 문제의 경우)을 예측한다.
이러한 거리 기반 알고리즘은 모두 변수 규모의 영향을 받는다. 알고리즘은 더 높은 크기의 변수 쪽으로 편향되어서는 안된다. 이 문제를 극복하기 위해 모든 변수를 동일한 규모로 축소할 수 있다.</p>
<h5 id="대표적인-스케일링-방법"><strong>대표적인 스케일링 방법</strong></h5>
<ul>
<li><p>방법 1: 정규화(Normalization)
  각 변수의 값이 0과 1사이 값이 됨
$
X_{norm} = \displaystyle {x - {x_{min}}\over{x_{max} - x_{min}}}
$</p>
</li>
<li><p>방법 2: 표준화(Standardization)
  각 변수의 평균이 0, 표준편차가 1이 됨
$
X_{z} = \displaystyle {x - {x_{mean}}\over{x_{std}}}
$</p>
</li>
<li><p>평가용 데이터에도 학습용 데이터를 기준으로 스케일링을 수행!</p>
</li>
<li><p>sklearn이 제공하는 함수를 사용 가능</p>
<pre><code class="language-python"># 함수 불러오기
from sklearn.preprocessing import MinMaxScaler
# 정규화
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)</code></pre>
</li>
</ul>
<h4 id="회귀모델-구현">회귀모델 구현</h4>
<ul>
<li>알고리즘 함수: sklearn.neighbors.KNeighborsRegressor</li>
<li>성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등</li>
</ul>
<h4 id="분류모델-구현">분류모델 구현</h4>
<ul>
<li>알고리즘 함수: sklearn.neighbors.KNeighborsClassifier</li>
<li>성능평가 함수:  sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등</li>
</ul>
<hr>
<h3 id="📌-decision-tree">📌 Decision Tree</h3>
<ul>
<li>결정 트리, 의사 결정 나무</li>
<li>특정 변수에 대한 의사결정 규칙을 나무 가지가 뻗는 형태로 분류해 나감</li>
<li>분류와 회귀 모두에 사용되는 지도학습 알고리즘</li>
<li>훈련 데이터에 대한 제약 사항이 거의 없는 유연한 모델<ul>
<li>과적합으로 모델 성능이 떨어지기 쉬움</li>
<li>트리 깊이를 제한하는(=가지치기) 튜닝이 필요</li>
</ul>
</li>
</ul>
<h4 id="용어">용어</h4>
<ul>
<li>Root Node(뿌리마디): 전체 자료를 갖는 시작하는 마디</li>
<li>Terminal Node(끝마디): 자식 마디가 없는 마디(= Leaf Node)</li>
<li>Internal Node(중간 마디): 부모 마디와 자식 마디가 모두 있는 마디</li>
<li>Branch(가지): 연결되어 있는 2개 이상의 마디 집합</li>
<li>Depth(깊이): 뿌리 마디로부터 끝 마디까지 연결된 마디 개수</li>
</ul>
<h4 id="불순도impurity">불순도(Impurity)</h4>
<ul>
<li>순도가 높을수록 분류가 잘 된 것</li>
</ul>
<h5 id="불순도를-수치화-할-수-있는-지표">불순도를 수치화 할 수 있는 지표</h5>
<p><strong><em>지니 불순도</em></strong></p>
<ul>
<li>$지니 불순도 = 1 - (양성 클래스 비율^2 + 음성 클래스 비율^2)$</li>
</ul>
<p>$Gini = 1 - \sum_{i=1}^{c} {(pi)^2}$</p>
<ul>
<li>분류 후에 얼마나 잘 분류했는지 평가하는 지표</li>
<li>특징<ul>
<li>지니 불순도가 낮을수록 순도가 높음</li>
<li>지니 불순도응 0 ~ 0.5 사이의 값(이진 분류의 경우)<ul>
<li>순수하게 분류되면 → 0</li>
<li>완벽하게 섞이면(50:50) → 0.5</li>
</ul>
</li>
<li>지니 불순도가 낮은 속성으로 의사결정 트리 노드 결정</li>
</ul>
</li>
</ul>
<p><strong><em>엔트로피(Entropy)</em></strong></p>
<ul>
<li>$엔트로피 = -음성클래스비율 \times \log_2(음성클래스비율) - 양성클래스비율 \times \log_2(양성클래스비율)$</li>
</ul>
<p>$Entropy = -\sum_{i=1}^m {p_i \log_2 p_i}$</p>
<ul>
<li>p_i = 집합 안에서 속성 i의 확률을 나타냄</li>
<li>엔트로피는 0~1 사이의 값<ul>
<li>순수하게 분류되면 → 0</li>
<li>완벽하게 섞이면(50:50) → 1</li>
</ul>
</li>
</ul>
<p><strong>* 정보 이득(Information Gain)*</strong></p>
<ul>
<li>어떤 속성이 얼마나 많은 정보를 제공하는가</li>
<li>정보 이득 공식</li>
</ul>
<p>$Gain(T, X) = Entropy(T) - Entropy(T, X)$</p>
<ul>
<li>정보 이득이 크다 = 어떤 속성으로 분할할 때 불순도가 줄어든다</li>
<li>모든 속성에 대해 분할한 후 정보 이득 계산</li>
<li>정보 이득이 가장 큰 속성부터 분할</li>
</ul>
<h4 id="가지치기">가지치기</h4>
<ul>
<li><p>가지치기 하지 않으면 과대적합, 일반화되지 못함</p>
</li>
<li><p>여러 하이퍼파라미터 값을 조정해 가지치기 가능</p>
</li>
<li><p>학습 데이터에 대한 성능은 낮아지나, 평가 데이터에 대한 성능을 높일 수 있음</p>
</li>
<li><p>적절한 하이퍼파라미터 값을 찾도록 노력</p>
</li>
<li><p>주요 하이퍼파라미터</p>
<ul>
<li>max_depth: 트리의 최대 깊이(기본값: None)</li>
<li>min_samples_split: 노드를 분할하기 위한 최소한의 샘플 개수(기본값: 2)</li>
<li>min_samples_leaf: 리프 노드가 되기 위한 최소한의 샘플 수(기본값: 1)</li>
<li>max_feature: 최선의 분할을 위해 고려할 Feature 수(기본값: None)</li>
<li>max_leaf_node: 리프 노드 최대 개수</li>
</ul>
</li>
</ul>
<h4 id="회귀모델-구현-1">회귀모델 구현</h4>
<ul>
<li>알고리즘 함수: sklearn.tree.DecisionTreeRegressor</li>
<li>성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등</li>
</ul>
<h4 id="분류모델-구현-1">분류모델 구현</h4>
<ul>
<li>알고리즘 함수: sklearn.tree.DecisionTreeClassifier</li>
<li>성능평가 함수:  sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등</li>
</ul>
<hr>
<h3 id="📌-logistic-regression">📌 Logistic Regression</h3>
<h4 id="로지스틱-함수">로지스틱 함수</h4>
<ul>
<li><p>시그모이드(sigmoid) 함수
$p = {1 \over 1 = e^{-f(x)}}$</p>
</li>
<li><p>확률 값 𝑝 는 선형 판별식 값이 커지면 1, 작아지면 0에 가까운 값이 됨</p>
</li>
<li><p>($-\infin$, $\infin$) 범위를 갖는 선형 판별식 결과로 $(0, 1)$ 범위의 확률 값을 얻게 됨</p>
</li>
<li><p>기본적으로 확률 값 0.5를 임계값(Threshold)로 하여 이보다 크면 1, 아니면 0으로 분류</p>
</li>
</ul>
<h4 id="분류모델-구현-2">분류모델 구현</h4>
<ul>
<li>Logistic Regression 알고리즘은 분류모델에만 사용할 수 있음</li>
<li>알고리즘 함수:  sklearn.linear_model.LogisticRegression</li>
<li>성능평가 함수:  sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등</li>
</ul>
<hr>
<h3 id="📌-k-fold-cross-validation">📌 K-Fold Cross Validation</h3>
<ul>
<li>모든 데이터가 평가에 한 번, 학습에 k-1번 사용</li>
<li>K개의 분할(Fold)에 대한 성능을 예측 → 평균과 표준편차 계산 → 일반화 성능</li>
<li>단, k는 2 이상이 되어야 함(최소한 한 개씩의 학습용, 검증용 데이터가 필요)</li>
<li>모델 선언 후 cross_val_score(모델, x_train, y_train, 분할 개수) 형태로 사용</li>
<li>기본 분할 개수(cv) 값은 5이며, 필요에 따라 적절히 조절할 수 있음</li>
<li>cross_val_score 함수 결과로 얻은 성능들의 평균을 모델의 성능으로 봄</li>
</ul>
<hr>
<h3 id="📌-hyperparameter-튜닝">📌 Hyperparameter 튜닝</h3>
<ul>
<li>Hyperparameter</li>
<li>Random Search, Grid Search</li>
</ul>
<p>이 부분에 대해선 더 공부가 필요하다. 공부를 하면서 차차 추가해 보도록 하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 머신러닝1]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D1</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D1</guid>
            <pubDate>Tue, 19 Sep 2023 02:44:15 GMT</pubDate>
            <description><![CDATA[<p>머신러닝은 크게 학습에 따라 세 분류로 나뉜다.</p>
<h3 id="지도학습">지도학습</h3>
<p>학습 대상이 되는 데이터에 정답을 주어 규칙성, 즉 데이터의 패턴을 배우게 하는 학습 방법</p>
<ul>
<li><strong>분류(Classification)</strong> - 범줏값을 예측<ul>
<li>이미 적절히 분류된 데이터를 학습하여 분류 규칙을 찾고, 그 규칙을 기반으로 새롭게 주어진 데이터를 적절히 분류하는 것을 목적으로 함</li>
</ul>
</li>
<li><strong>회귀(Regression)</strong> - 연속적인 숫자를 예측<ul>
<li>이미 결과값이 있는 데이터를 학습하여 입력 값과 결과 값의 연관성을 찾고, 그 연관성을 기반으로 새롭게 주어진 데이터에 대한 값을 예측하는 것을 목적으로 함</li>
</ul>
</li>
</ul>
<ul>
<li>분류와 회귀는 서로 다른 함수를 사용해 모델링을 하게 됨</li>
</ul>
<table>
<thead>
<tr>
<th align="left">분류 문제</th>
<th align="left">회귀 문제</th>
</tr>
</thead>
<tbody><tr>
<td align="left">DecisionTreeClassifier</td>
<td align="left">LinearRegression</td>
</tr>
<tr>
<td align="left">KNeighborsClassifier</td>
<td align="left">KNeighborsRegressor</td>
</tr>
<tr>
<td align="left">LogisticRegression</td>
<td align="left">DecisionTreeRegressor</td>
</tr>
<tr>
<td align="left">RandomForestClassifier</td>
<td align="left">RandomForestRegressor</td>
</tr>
<tr>
<td align="left">XGBClassifier</td>
<td align="left">XGBRegressor</td>
</tr>
<tr>
<td align="left">---</td>
<td align="left">---</td>
</tr>
<tr>
<td align="left">accuracy_score</td>
<td align="left">mean_absolute_error</td>
</tr>
<tr>
<td align="left">recall_score</td>
<td align="left">mean_squared_error</td>
</tr>
<tr>
<td align="left">precision_score</td>
<td align="left">root mean_squared_error</td>
</tr>
<tr>
<td align="left">classification_report</td>
<td align="left">mean_absolute_percentage_error</td>
</tr>
<tr>
<td align="left">confusion_matrix</td>
<td align="left">r2_score</td>
</tr>
</tbody></table>
<h3 id="비지도학습">비지도학습</h3>
<p>정답이 없는 데이터 만으로 배우게 하는 학습 방법</p>
<ul>
<li>군집화(Clustering)<ul>
<li>주어진 데이터를 학습하여 적절한 분류 규칙을 찾아 데이터를 분류함을 목적으로 함. 정답이 없으니 성능을 평가하기도 어려움</li>
</ul>
</li>
<li>변환(Transform)</li>
<li>연관(Association)</li>
</ul>
<h3 id="강화학습">강화학습</h3>
<p>선택한 결과에 대해 보상을 받아 행동을 개선하면서 배우게 하는 학습 방법</p>
<hr>
<h3 id="📌-회귀-모델-성능-평가">📌 회귀 모델 성능 평가</h3>
<h4 id="✔️-회귀-평가-지표-정리">✔️ 회귀 평가 지표 정리</h4>
<ul>
<li><p><strong><em>MSE</em></strong>, <em>Mean Squared Error</em>
  오차 제곱(SSE)의 합을 구한 후 평균을 구함
  $MSE = \displaystyle {\sum{(y-\hat{y})^2} \over n}$</p>
</li>
<li><p><strong><em>RMSE</em></strong>, <em>Root Mean Squared Error</em>
  오차의 제곱이므로 루트를 사용해 일반적인 값으로 표현
  $RMSE = \displaystyle \sqrt{\sum{(y-\hat{y})^2} \over n}$</p>
</li>
<li><p><strong><em>MAE</em></strong>, <em>Mean Absolute Error</em>
  오차 절댓값의 합을 구한 후 평균을 구함
  $MAE = \displaystyle {\sum\vert{(y-\hat{y})^2\vert} \over n}$</p>
</li>
<li><p><strong><em>MAPE</em></strong>, <em>Mean Absolute Percentage Error</em>
  오차 비율을 표시하고 싶은 경우 MAPE를 사용함
  $MAPE = \displaystyle {{\sum{\vert{y-\hat{y}\over n}\vert} }\over n}$</p>
</li>
</ul>
<h4 id="✔️-오차를-보는-다양한-관점">✔️ 오차를 보는 다양한 관점</h4>
<img src="https://velog.velcdn.com/images/harii-in/post/fc2f5184-4fb8-4528-9a20-42c9eb0cb647/image.png" width = 50%>

<ul>
<li><p><strong><em>SST</em></strong>, Sum Squared Total
  전체 오차(최소한 평균 보다는 성능이 좋아야 하니, 우리에게 허용된 오차)
  $SST = \displaystyle {\sum_{i=1}^{n}{(y_i-\bar{y})^2}}$</p>
</li>
<li><p><strong><em>SSR</em></strong>, Sum squared Regression
  전체 오차 중에서 회귀식이 잡아낸 오차
  $SSR = \displaystyle {\sum_{i=1}^{n}{(\hat{y_i}-\bar{y})^2}}$</p>
</li>
<li><p><strong><em>SSE</em></strong>, Sum Squared Error
  전체 오차 중에서 회귀식이 여전히 잡아내지 못한 오차
  $SSE = \displaystyle {\sum_{i=1}^{n}{(y_i-\hat{y_i})^2}}$</p>
</li>
<li><p><strong>$SST=SSR+SSE$*</strong></p>
</li>
</ul>
<h4 id="✔️-결정계수-r2-r-squared">✔️ 결정계수 $R^2$ (R-Squared)</h4>
<p>$R^2 = {{SSR} \over {SST}} = 1 - {SSE \over SST}$</p>
<ul>
<li>모델 성능을 해석하기 위해서 만든 MSE의 표준화된 버전이 결정 계수임</li>
<li>전체 오차 중에서 회귀식이 잡아낸 오차 비율(일반적으로 0~1 사이)</li>
<li>오차의 비 또는 설명력이라고 부름</li>
<li>$𝑅^2 = 1$이면 $𝑀𝑆𝐸 = 0$이고 모델이 데이터를 완벽하게 학습한 것</li>
</ul>
<hr>
<h3 id="📌-분류-모델-성능-평가">📌 분류 모델 성능 평가</h3>
<h4 id="✔️-혼동행렬과-평가지표">✔️ 혼동행렬과 평가지표</h4>
<ul>
<li><p><strong>Confusion Matrix(오분류표)</strong>
<a href="https://fintechpark.tistory.com/6">사진출처</a></p>
<img src="https://velog.velcdn.com/images/harii-in/post/d524ccef-a36a-44a4-92af-456d90b0eea8/image.png" width = 80%>
</li>
<li><p>TN(True Negative, 진음성)
  음성으로 잘 예측한 것(음성을 음성이라고 예측한 것)</p>
</li>
<li><p>FP(False Positive, 위양성)
  양성으로 잘 못 예측한 것(음성을 양성이라고 예측한 것)</p>
</li>
<li><p>FN(False Negative, 위음성)
  음성으로 잘 못 예측한 것(양성을 음성이라고 예측한 것)</p>
</li>
<li><p>TP(True Positive, 진양성)
  양성으로 잘 예측한 것(양성을 양성이라고 예측한 것)</p>
</li>
</ul>
</br>

<ul>
<li><p><strong><em>정확도<span style="color:red">(Accuracy)</span></em></strong>
  $$
  (Accuracy) = \displaystyle {{TN + TP}\over{TN + FP + FN + TP}}
  $$</p>
<ul>
<li>전체 중에서 Positive와 Negative 로 정확히 예측한(TN + TP) 비율</li>
<li>가장 직관적으로 모델 성능을 확인할 수 있는 평가지표</li>
</ul>
</li>
<li><p><strong><em>정밀도<span style="color:red">(Precision)</span></em></strong>
  $$
  (Precision) = \displaystyle {{TP}\over{FP +TP}}
  $$</p>
<ul>
<li>Positive로 예측한 것(FP + TP) 중에서 실제 Positive(TP)인 비율</li>
</ul>
</li>
<li><p><strong><em>재현율<span style="color:red">(Recall)</span></em></strong>
  $$
  (Recall) = \displaystyle {{TP}\over{FN +TP}}
  $$</p>
<ul>
<li>실제 Positive(FN + TP) 중에서 Positive로 예측한(TP) 비율</li>
<li>민감도(Sensitivity)라고 부르는 경우가 많음</li>
</ul>
</li>
<li><p><strong><em>특이도<span style="color:red">(Specificity)</span></em></strong>
  $$
  (Specificity) = \displaystyle {{TN}\over{TN +FP}}
  $$</p>
<ul>
<li>실제 Negative(TN + FP) 중에서 Negative로 예측한(TN) 비율</li>
</ul>
</li>
<li><p><strong><em>F1-Score</em></strong>
  $$
  (F1-Score) = \displaystyle {{2 \times {Precision} \times {Recall}}\over{{Precision} + {Recall}}}
  $$</p>
<ul>
<li>정밀도와 재현율의 조화 평균</li>
<li>분자가 같지만 분모가 다를 경우, 즉 관점이 다른 경우 조화 평균이 큰 의미를 가짐</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 1차 미니 프로젝트]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-1%EC%B0%A8-%EB%AF%B8%EB%8B%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Mon, 28 Aug 2023 14:26:24 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-1차-미니-프로젝트">📌 1차 미니 프로젝트</h2>
<h3 id="⭐-서울시-생활-정보-기반-대중-교통-수요-분석">⭐ 서울시, 생활 정보 기반 대중 교통 수요 분석</h3>
<p><strong><em>미션: 버스 노선 추가가 필요한 서울시 내 자치구 선정</em></strong></p>
<p><strong>데이터 셋</strong></p>
<ul>
<li>구별 버스 정류장 분석</li>
<li>구별 이동인구 분석</li>
<li>구별 등록인구 분석</li>
<li>구별 업종 분석</li>
</ul>
<p>이렇게 총 네 개의 데이터가 주어졌고, 5개의 가설을 수립하였다.</p>
<ul>
<li>가설 1 : X = 자치구 → Y= 전체인구대비 버스이용승객비율</li>
<li>가설 2 : X = 자치구 → Y = 총 버스이용 승객 수 대비 정류장의 개수</li>
<li>가설 3 : X = 자치구 → Y = 정류장 대비 노선의 개수</li>
<li>가설 4 : X: 주점 종사자수 → Y: 정류장 수</li>
<li>가설 5 :  X: 유출(출발) 인구 → Y: 정류장(노선)의 개수</li>
</ul>
<blockquote>
<p>첫 미니 프로젝트..!
첫날에는 개인으로 데이터를 처리하는 것이 대부분이었다.
우리 조원분들은 다들 뚝딱뚝딱 잘 해나가셔서, 따라잡기 급급했다!
좀 더 복습할 걸이라는 후회도 했다...
집 가서 마자 분석까지 다하고 자야지!라고 생각했지만 집에서 분당까지 왕복으로 거의 2시간 반에서 3시간.. 집 가자마자 뻗어버렸다..
둘째 날부터 본격적으로 분석에 들어갔다. 사실 첫날에 데이터 처리할 때부터 어떤 시각으로 바라보고 어떻게 처리하고, 생각이 너무 많았다. 어떻게 해야 할지 감도 안 잡혔다.
조원분들이랑 가설 정하는 데 오랜 시간이 걸렸다. 강사님께 여쭤보니 우리가 너무 딥하게 생각했던 거 같다. 덕분에 다시 금방 간단하게 세우고 분석을 시작했다.
그만큼 너무 부족한 시간!! 분석하는데 시간이 부족한 만큼 PPT도 거의 못 만들었다.
잘 해보고 싶은데.. 이 부분은 조금씩 조금씩 내가 복습하면서 위에 가설을 바탕으로 다시 분석해 보고자 한다.
앞으로 조금씩 조금씩 수정해 보겠습니다!! ㅎㅎ</p>
</blockquote>
</br>

<h3 id="⭐-서울시-따릉이-수요-분석">⭐ 서울시, 따릉이 수요 분석</h3>
<p><strong>따릉이에 대한 도메인 이해</strong></p>
<ul>
<li>기름값이 증가하면서 출퇴근 시간대에 따릉이 이용량이 증가</li>
<li>그만큼 적자가 생기면서 요금 인상 가능성이 생김</li>
</ul>
<p><strong>데이터 셋</strong></p>
<ul>
<li>서울시 공공자전거 이용정보 (시간대별)</li>
<li>해당 시점의 날씨 자료</li>
</ul>
<p><strong>가설 수립</strong></p>
<ul>
<li>가설 1 : X = 대여 시작 시간 → Y = 따릉이 대여량</li>
<li>가설 2 : X: 온도 (14 ~ 24도) -&gt; Y: 따릉이 대여량</li>
<li>가설 3 : X: 미세먼지 -&gt; Y: 따릉이 대여량</li>
<li>가설 4 : X: 습도-&gt; Y: 따릉이 대여량</li>
</ul>
</br>

<p><strong>가설1: 출퇴근 시간대에 따릉이 대여량이 높을 것이다.</strong></p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/9aa90d1a-0a8b-4c79-a608-c66485fa2fad/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/efe44c48-ce54-4cc6-92c0-39e9b94ed1fb/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/911d1de1-9e07-4508-a893-690e6f529319/image.png" alt=""></th>
</tr>
</thead>
</table>
<ul>
<li>상관계수: 0.586</li>
<li>P-value: 0.0 → 0이 나올 수 없으나 상관계수가 0.5에 가깝기 때문에 유의하다고 판단</li>
<li>대립가설 성립 → 시간대와 따릉이 대여량 간의 강한 관계가 존재</li>
<li>출근 시간대는 따릉이 전체 이용자 중 약 12%로 생각보다 저조하다.</li>
<li>퇴근 시간대는 따릉이 전체 이용자 중 35%로 대여량이 높다.</li>
</ul>
</br>

<p><strong>가설2: 선선한 날씨에 따릉이 대여량이 높을 것이다.</strong></p>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/27cc6380-4a20-4bcb-a580-9de947880237/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/5cc80955-a67d-4fb0-aaa2-7a44e8a04858/image.png" alt=""></th>
</tr>
</thead>
<tbody><tr>
<td>* 상관계수: 0.277</td>
<td></td>
</tr>
<tr>
<td>* P-value: 2.94𝑒^(−103)</td>
<td></td>
</tr>
<tr>
<td>* 대립가설 성립 → 온도와 따릉이 대여량 간의 관계가 존재</td>
<td></td>
</tr>
<tr>
<td>* 생각했던 선선한 날씨보다 24도가 넘는 더운 날에 따릉이 대여량이 더 높다.</td>
<td></td>
</tr>
<tr>
<td>* 폭염 기준인 33도를 넘는 날은 약 1.46%로 폭염에는 따릉이 대여량이 현저히 적다.</td>
<td></td>
</tr>
</tbody></table>
<blockquote>
<p>전 날 프로젝트 하면서 한 번 경험이 있어서 그런가, 이번에는 비교적 빠르게 서로 의견을 내며 진행이 되었다.
주어진 내용으로만 가설을 세우기에는 부족하다고 판단해서, 우리는 좀 더 세부적으로 세우고자 했다.
가설 하나하나마다 서로 토론하고 분석하고 의미를 찾다 보니 시간이 좀 오래 걸린 듯하다. 팀 프로젝트다 보니 분업도 중요하다고 많이 느꼈다.
강사님과 매니저님 두 분 모두 우리 조 분위기 좋고 잘 진행하고 있다고 하셔서 기분이 너무 좋았다. 발표도 하고 싶었지만 결국에 가설 두 번째 거까지만 진행하고 시간이 부족해서 발표를 못했다.
자꾸 매번 시간이 부족한 부분이 너무 아쉽다!! 다음번에는 더 잘해보고 싶다는 마음이 점점 더 커진다!
이 부분도 앞에 거부터 차근차근하다 보면 금방 정리하겠죠?ㅎㅎ</p>
</blockquote>
</br>


<hr>
</br>

<h2 id="🍚-맛집-추천">🍚 맛집 추천</h2>
<h3 id="✔️-함흥미식관">✔️ 함흥미식관</h3>
<blockquote>
<ul>
<li>매일 11:00 - 21:00</li>
<li>경기 성남시 분당구 불정로77번길 15 1층</li>
<li>물.비빔냉면 11,000<img src="https://velog.velcdn.com/images/harii-in/post/196f86f2-c564-407f-8d95-0c33ce81e481/image.png" width="40%">
</li>
</ul>
</blockquote>
<p>여름이 끝나가는 무렵 먹고싶던 냉면!!
냉면 먹으러 가는거 어떻냐고 여쭤봤더니, 다들 흔쾌히 가자고 해주셔서 감사합니다 ㅎㅎ
사진은 같은 조 팀원분께서...!! 감사합니당 ㅎㅎ
KT본사 근처 냉면 맛집이라고 해서 가봤는데, 진짜로 맛있습니다! 오랜만에 냉면 한그릇 뚝딱!!
하지만 저에겐 양이 조금 부족했습니다 ㅠㅠ 사리 추가가 있던데, 했어야 했어요...
냉면 좋아하는 분들은 사리 추가! 하시는 걸로 ㅎ</p>
<h3 id="✔️-평이담백뼈칼국수-분당정자점">✔️ 평이담백뼈칼국수 분당정자점</h3>
<blockquote>
<ul>
<li>매주 월요일 정기휴무</li>
<li>11:30 - 21:00</li>
<li>경기 성남시 분당구 불정로77번길 10 1층</li>
<li>뼈칼국수 11, 000</li>
<li>비빔 칼국수 10,000</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/a7c6a806-648b-43f4-a4f1-52aef29e23f7/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/181de874-1e3c-4a26-979c-171de6949914/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/831bf488-3af4-414b-8603-61a7d6889351/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>여기는 분당 매니저님이 추천해주신 뼈칼국수집!!
추천해주신만큼 저엉말 맛있고 배부르게 먹었습니다...!!
저는 비빔칼국수 먹었는데, 다음 번에는 뼈칼국수 먹으려고요 ㅋㅋㅋㅋ
뼈칼국수는 사골 육수..?에 감자탕집 뼈..?인데 와..맛있습니다!! 고기도 많고요 ㅋㅋㅋㅋ
다들 엄청 배불러 하셨어요! 저도 엄청 배 빵빵!!
다른 맛집도 추천해주셨는데, 기억이 잘 안나네요.. 다시 여쭤보고, 다른 집도 가보겠습니다 ㅎㅎ</p>
<h3 id="❗마무리">❗마무리</h3>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/harii-in/post/d37d98ab-bf09-4bdd-8de2-00cbffa6b919/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/7e471ad4-7499-4df5-bc05-9e9696e66a9e/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/harii-in/post/69972eab-7450-47b7-90d3-6c35aa4470ea/image.png" alt=""></th>
</tr>
</thead>
</table>
<p>음.. 사진이 은근히 마음대로 돌아가네요?
조정해야 하지만, 지금 너무 피곤한 관계로, 그냥 넘어가도록 하겠습니다!
처음으로 같은 조로 첫 미니 프로젝트를 3일 내내 함께하다 보니 엄청 정든 거 같아요!
다들 그러시죠..? 제 블로그 보실 거... 같은데.. 아닌가요...?ㅋㅋㅋㅋㅋㅋㅋ
15조 막내.. 여러분 덕분에 많이 배우고 즐거웠습니다! 감사합니다!! ( _ _ )
맛있는 거 많이 먹고 볼링도 쳤습니다! 볼링!!! 잘 칠 줄 알았는데!!! 역대급으로 못 쳤네요...
다음번에는 잘 치고 싶습니다... 다음번에 꼭!! 한강에서 봬요😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] 데이터 처리]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Sat, 26 Aug 2023 06:12:17 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-데이터프레임-변경">📌 데이터프레임 변경</h2>
<ul>
<li>columns 속성 변경: 모든 열 이름 변경</li>
<li>rename() 메소드 사용: 지정한 열 이름 변경<ul>
<li>이때. inplace = True는 진짜로 수정하라는 말.</li>
</ul>
</li>
</ul>
<pre><code class="language-python">.rename(columns = {key: value}, inplace = True)</code></pre>
<h3 id="열-추가">열 추가</h3>
<ul>
<li>맨 뒤에 열 추가</li>
<li>지정한 위치에 열 추가</li>
</ul>
<h3 id="열-삭제">열 삭제</h3>
<ul>
<li>drop() 메소드를 사용해 열 삭제<ul>
<li>axis = 0: 행 삭제(기본값)</li>
<li>axis = 1: 열 삭제</li>
<li>inplace = False: 삭제한 것 처럼 보이게 하는 것</li>
<li>inplace = True: 진짜로 삭제</li>
</ul>
</li>
</ul>
<h2 id="📌-데이터프레임-결합">📌 데이터프레임 결합</h2>
<h3 id="pdconcat"><em>pd.concat()</em></h3>
<ul>
<li>매핑기준: 인덱스(행), 칼럼이름(열)</li>
</ul>
<ul>
<li>방향: axis = 0<ul>
<li>세로 (행)로 합치기(위, 아래로 붙여라 / 행 방향으로 붙여라!)</li>
<li>칼럼 이름 기준</li>
</ul>
</li>
<li>방향: axis = 1<ul>
<li>가로 (열)로 합치기 (옆으로 붙여라)</li>
<li>행 인덱스 기준</li>
</ul>
</li>
</ul>
<ul>
<li>방법 join<ul>
<li>&#39;outer&#39;: <strong>모든</strong> 행과 열 합치기(기본값)</li>
<li>&#39;inner&#39;: <strong>같은</strong> 행과 열 합치기</li>
</ul>
</li>
</ul>
<h3 id="pdmerge"><em>pd.merge()</em></h3>
<ul>
<li>매핑기준: 특정 칼럼(key)의 값 기준으로 결합</li>
<li>데이터베이스 테이블 조인과 같다.</li>
<li>지정한 칼럼의 <strong>값을 기준</strong>으로 병합<ul>
<li>옆으로만 병합</li>
<li>어떤 칼럼을 기준 삼을 것인가?</li>
<li>방법 how<ul>
<li>inner: 같은 값만</li>
<li>outer: 모두</li>
<li>left: 왼쪽 df는 모두, 오른쪽 df는 같은 값만</li>
<li>right: 오른쪽 df는 모두, 왼쪽 df는 같은 값만</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="pdpivot"><em>pd.pivot</em></h3>
<ul>
<li>pivot 함수를 이용하여 집계된 데이터를 재구성할 수 있다.</li>
<li>문법: dataframe.pivot(index, column, values)</li>
</ul>
<h2 id="📌-시계열-데이터">📌 시계열 데이터</h2>
<blockquote>
<ul>
<li>행과 행에 시간의 순서(흐름)가 있고</li>
<li>행과 행의 시간간격이 동일한 데이터</li>
</ul>
</blockquote>
<h3 id="날짜-요소-뽑기">날짜 요소 뽑기</h3>
<ul>
<li>날짜 타입의 변수로부터 날짜의 요소를 뽑아낼 수 있다.</li>
<li><strong><em>.dt.날짜요소</em></strong></li>
</ul>
<h3 id="시간에-따른-흐름-추출하기-time-lag">시간에 따른 흐름 추출하기: Time Lag</h3>
<ul>
<li>.shift()<ul>
<li>시계열 데이터에서 시간의 흐름 전후로 정보를 이동시킬 때 사용</li>
</ul>
</li>
</ul>
<h3 id="시간에-따른-흐름-추출하기-moving-average">시간에 따른 흐름 추출하기: Moving Average</h3>
<ul>
<li>.rolling().mean()<pre><code>* 시간의 흐름에 따라 일정 기간 동안 평균을 이동하면서 구하기</code></pre></li>
</ul>
<h3 id="시간에-따른-흐름-추출하기-차분">시간에 따른 흐름 추출하기: 차분</h3>
<ul>
<li>.diff()<ul>
<li>특정 시점 데이터, 이전시점 데이터와의 차이 구하기</li>
</ul>
</li>
</ul>
<h2 id="📌-시각화-라이브러리">📌 시각화 라이브러리</h2>
<h3 id="데이터의-시각화">데이터의 시각화</h3>
<ul>
<li>수 많은 데이터를 한 눈에 파악하는 두 가지 방법</li>
<li>Focus<ul>
<li>우리가 다루는 데이터에는 <strong>비지니스</strong>가 담겨 있다</li>
<li>데이터 시각화의 목적은<ul>
<li>아름다운 그래프가 아니라, 통계적인 해석을 넘어, 비지니스의 <strong>인사이트</strong>를 파악하는 것이다.</li>
</ul>
</li>
</ul>
</li>
<li>한계<ul>
<li>그래프와 통계량에섯 <strong>요약된 정보</strong>(원본)가 표현된다.</li>
<li>요약을 하는 <strong>관점</strong>에 따라 해석의 결과가 달라질 수 있다.</li>
<li>어떤 식으로든 요약을 하면, 정보의 <strong>손실</strong>이 발생된다.</li>
</ul>
</li>
</ul>
<h3 id="기본-코드-구조">기본 코드 구조</h3>
<ul>
<li>라이브러리: matplotlib.pyplot</li>
<li><strong><em>plt.plot()</em></strong><ul>
<li>기본 라인차트를 그려준다.</li>
<li><em>plt.plot(x, y)</em></li>
<li><em>plt.plot(x, y, data)</em></li>
</ul>
</li>
<li><strong><em>plt.show()</em></strong><ul>
<li>그래프를 화면에 출력해 준다.</li>
</ul>
</li>
</ul>
<h3 id="부가적인">부가적인</h3>
<ul>
<li><strong><em>plt.xticks(rotation=각도)</em></strong> : x축 값 조정하기</li>
<li><strong><em>plt.xlabel(), plt.ylabel()</em></strong>: 축 레이블 추가</li>
<li><strong><em>plt.title()</em></strong>: 그래프 제목(타이틀) 추가</li>
<li>이 외에도 색, 라인 스타일, 마커 등을 바꿀 수 있다.</li>
</ul>
<h2 id="📌-단변량-분석---숫자형">📌 단변량 분석 - 숫자형</h2>
<ul>
<li><strong><em>df.describe()</em></strong><ul>
<li>데이터 프레임의 숫자형 변수들에 대해서 기초 통계량을 구함.</li>
</ul>
</li>
</ul>
<h3 id="숫자형-변수-시각화하기">숫자형 변수 시각화하기</h3>
<ul>
<li>기초 통계량(basic statistics)<ul>
<li>Box Plot:<ul>
<li>plt.boxplot()</li>
<li>사전에 반드시 NaN 제외</li>
<li>sns.boxplot은 NaN을 알아서 제거해 줌</li>
</ul>
</li>
</ul>
</li>
<li>도수분포표(frequency table)<ul>
<li>Histogram:<ul>
<li>plt.hist(변수명, bins = 구간 수)</li>
</ul>
</li>
<li>Density Plot (KDE Plot):<ul>
<li>sns.kdeplot(변수명)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="📌-단변량-분석---범주형">📌 단변량 분석 - 범주형</h2>
<ul>
<li>범주별 빈도수<ul>
<li>시리즈.value_counts()</li>
</ul>
</li>
</ul>
<h3 id="범주형-변수-시각화-bar-plot">범주형 변수 시각화: Bar Plot</h3>
<ul>
<li><strong><em>sns.countplot</em></strong><ul>
<li>범주별 빈도수를 계산하고 bar plot으로 나타냄</li>
</ul>
</li>
<li><strong><em>plt.bar</em></strong><ul>
<li>범주별 빈도수를 직접 계산한 결과 입력 시 범주별 빈도 bar plot 생성</li>
</ul>
</li>
</ul>
<hr>
<h2 id="❗마치며">❗마치며..</h2>
<p>데이터를 분석하기 전에 어떻게 처리해야 하는지에 대해 배웠다..
아직 손에 익숙하지도 않고 이렇게 처리한 데이터를 어떻게 분석해야 할지 감도 잘 안 오지만,
다음 번 포스팅에는 종합 문제를 통해 단변량, 이변량 분석을 통해 어떻게 분석하고 의미를 찾아내야 하는지 복습하면서 정리해 보고자 한다.
곧 미니 프로젝트인데 걱정 반, 기대 반..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KT AIVLE 4기] Python 프로그래밍 & 라이브러리 2]]></title>
            <link>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-Python-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-2</link>
            <guid>https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-Python-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-2</guid>
            <pubDate>Sun, 13 Aug 2023 08:01:45 GMT</pubDate>
            <description><![CDATA[<h1 id="pandas">Pandas</h1>
<blockquote>
<p>pandas는 데이터 조작 및 분석을 위한 파이썬 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리이다. 숫자 테이블과 시계열을 조작하기 위한 데이터 구조와 연산을 제공하며, 무료 소프트웨어 New BSD 라이센스이다.
-위키백과</p>
</blockquote>
<h2 id="데이터프레임dataframe">데이터프레임(DataFrame)</h2>
<ul>
<li><strong>Series</strong><ul>
<li>하나의 정보에 대한 데이터들의 집합</li>
<li>DataFrame의 단일 열에 대한 데이터 구조(1차원)</li>
</ul>
</li>
<li>데이터 분석에서 가장 중요한 데이터 구조</li>
<li>관계형 데이터베이스의 테이블 또는 엑셀 시트와 같은 형태</li>
<li>Series들을 하나의 열로 취급한 집합</li>
</ul>
<h3 id="📌-라이브러리-불러오기">📌 라이브러리 불러오기</h3>
<pre><code class="language-python">import pandas as pd</code></pre>
<h3 id="📌-딕셔너리로-만들기">📌 딕셔너리로 만들기</h3>
<blockquote>
<h4 id="데이터프레임-직접-만들기">데이터프레임 직접 만들기</h4>
<ul>
<li><strong>pd.DataFrame()</strong> 함수를 사용해 데이터프레임을 직접 만들 수 있다.</li>
<li>대부분 리스트, 딕셔너리, Numpy 배열로부터 데이터프레임을 만든다.</li>
</ul>
</blockquote>
<pre><code class="language-python"># 딕셔너리
dict1 = {&#39;Name&#39;: [&#39;Gildong&#39;, &#39;Sarang&#39;, &#39;Jiemae&#39;, &#39;Yeoin&#39;],
        &#39;Level&#39;: [&#39;Gold&#39;, &#39;Bronze&#39;, &#39;Silver&#39;, &#39;Gold&#39;],
        &#39;Score&#39;: [56000, 23000, 44000, 52000]}
df = pd.DataFrame(dict)

# 리스트
frame = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])</code></pre>
<h3 id="📌-csv파일-읽어오기">📌 CSV파일 읽어오기</h3>
<pre><code class="language-python">path = &#39;https://raw.githubusercontent.com/DA4BAM/dataset/master/titanic_simple.csv&#39;
data = pd.read_csv(path) </code></pre>
<p><img src="https://velog.velcdn.com/images/harii-in/post/0d71c685-6329-424a-bac9-880852e64bf2/image.png" alt=""></p>
<h3 id="📌-데이터프레임-정보-확인">📌 데이터프레임 정보 확인</h3>
<ul>
<li><mark>head 메소드</mark>: 상위 데이터 확인 (기본값 5개)</li>
<li><mark>tail 메소드</mark>: 하위 데이터 확인 (기본값 5개)</li>
<li><mark>shape 속성</mark>: 크기 확인 → (행수, 열수) 형태</li>
</ul>
<pre><code class="language-python">data.head(3)    # 상위 3개
data.tail(10)    # 하위 10개
data.shape        # (891, 8)</code></pre>
<h3 id="📌-열-행-정보-보기">📌 열, 행 정보 보기</h3>
<ul>
<li><mark>values</mark>: 값 정보 확인(저장하면 2차원 numpy 배열이 됨)</li>
<li><mark>columns</mark>: 열 정보 확인<pre><code class="language-python">data.columns
# Index([&#39;PassengerId&#39;, &#39;Survived&#39;, &#39;Pclass&#39;, &#39;Name&#39;, &#39;Sex&#39;, &#39;Age&#39;, &#39;Fare&#39;,&#39;Embarked&#39;], dtype=&#39;object&#39;)
</code></pre>
</li>
</ul>
<p>data.columns.values        # np.array 형태</p>
<h1 id="데이터프레임을-리스트-함수에-넣으면-열-이름이-리스트로-반환됨">데이터프레임을 리스트 함수에 넣으면 열 이름이 리스트로 반환됨</h1>
<p>list(data)</p>
<pre><code>
* &lt;mark&gt;dtypes&lt;/mark&gt;: 열 자료형 확인
  * int64: 정수형 데이터(int)
  * float64: 실수형 데이터(float)
  * object: 문자열 데이터(string)
* &lt;mark&gt;info&lt;/mark&gt;: 인덱스, 열, 값 개수, 데이터 형식 정보 등 확인
* &lt;mark&gt;describe&lt;/mark&gt;: 기초 통계 정보 확인(count, mean, std, mi, 25%, 50%, 75%, max)

### 📌 데이터 정렬
* &lt;mark&gt;sort_index&lt;/mark&gt; 메소드로 인덱스를 기준으로 정렬
* &lt;mark&gt;sort_values&lt;/mark&gt; 메소드로 특정 열을 기준으로 정렬
* 정렬 방법
  * ascending = True: 오름차순 정렬(기본값)
  * ascending = False: 내림차순 정렬
```python
# 내림차순 정렬
data.sort_index(ascending = False)

# Age 열을 기준으로 내림차순 정렬
data.sort_values(by = &#39;Age&#39;, ascending = False)

# 복합 열 정렬
data.sort_values(by = [&#39;Age&#39;, &#39;Pclass&#39;], ascending = [True, False])</code></pre><h3 id="📌-기본-집계">📌 기본 집계</h3>
<h4 id="✔️고유-값-확인">✔️고유 값 확인</h4>
<ul>
<li><mark>unique()</mark> 메소드: 고유 값 확인</li>
<li><mark>value_counts()</mark> 메소드: 고유 값과 그 개수 확인<pre><code class="language-python">print(data[&#39;Embarked&#39;].unique())    # [&#39;Southampton&#39; &#39;Cherbourg&#39; &#39;Queenstown&#39; nan]
</code></pre>
</li>
</ul>
<p>print(data[&#39;Embarked&#39;].value_counts())</p>
<h1 id="southampton----644">Southampton    644</h1>
<h1 id="cherbourg------168">Cherbourg      168</h1>
<h1 id="queenstown------77">Queenstown      77</h1>
<h1 id="name-embarked-dtype-int64">Name: Embarked, dtype: int64</h1>
<pre><code>#### ✔️기본 집계 메소드
* &lt;mark&gt;sum()&lt;/mark&gt;: 합
* &lt;mark&gt;mean()&lt;/mark&gt;: 평균
* &lt;mark&gt;max()&lt;/mark&gt;: 최댓값
* &lt;mark&gt;min()&lt;/mark&gt;: 최솟값
* &lt;mark&gt;count()&lt;/mark&gt;: 개수
```python
data[&#39;Age&#39;].sum()    # 21205.17

# Age, Fare 두 열의 최댓값을 한 번에 확인
data[[&#39;Age&#39;, &#39;Fare&#39;]].max()
# Age      80.0000
# Fare    512.3292
# dtype: float64</code></pre><h3 id="📌-특정-열-조회">📌 특정 열 조회</h3>
<ul>
<li>1차원(시리즈)로 조회<ul>
<li>DataFrame[&#39;column&#39;]</li>
<li>DataFrame.column</li>
</ul>
</li>
<li>2차원(데이터프레임)으로 조회<ul>
<li>칼럼 이름을 리스트로 입력할 것!</li>
<li>DataFrame[[&#39;column&#39;]]<pre><code class="language-python"># 1차원 조회
data[&#39;Age&#39;]
data.Age
</code></pre>
</li>
</ul>
</li>
</ul>
<h1 id="2차원-조회">2차원 조회</h1>
<p>data[[&#39;Age&#39;]]
data[[&#39;Age&#39;, &#39;Pclass&#39;]]        # Age, Pclass 열만 조회</p>
<h1 id="age-pclass열만-age-열-기준으로-내림차순-정렬해서-조회">Age, Pclass열만 Age 열 기준으로 내림차순 정렬해서 조회</h1>
<p>data[[&#39;Age&#39;, &#39;Pclass&#39;]].sort_values(by = &#39;Age&#39;, ascending = False)</p>
<pre><code>
* 조건으로 조회: **.loc[행 조건, 열 이름]**
  * 행 조건: 조건문 형태 → 조건에 만족하는 데이터만 조회
  * 열 이름
    * 생략 가능
    * 열 이름 1개 → 결과: 시리즈
    * 열 이름(여러 개)을 리스트로 → 결과: 데이터프레임
  * isin(), between() 메소드
    * &lt;mark&gt;isin([값1, ..., 값n])&lt;/mark&gt;: 값1 또는 ... 값n인 데이터만 조회
    * &lt;mark&gt;between(n, m)&lt;/mark&gt;: n~m까지 범위 안의 데이터만 조회
```python
# 단일 조건 조회
data.loc[data[&#39;Age&#39;]&gt;=70]

# 여러 조건 조회
data.loc[data[&#39;Age&#39;]&gt;= 70 &amp; data[&#39;Pclass&#39;] == 2)]

# 조건을 만족하는 행의 일부 열 조회
data.loc[data[&#39;Age&#39;] &gt;= 30, [&#39;Pclass&#39;, &#39;Sex&#39;]]

# isit() 메소드
data.loc[data[&#39;Embarked&#39;].isin([&#39;Southhampton&#39;, &#39;Queenstown&#39;])]

# between() 메소드
data.loc[data[&#39;Age&#39;].between(10, 20, inclusive=&#39;left&#39;) &amp; (data[&#39;Sex&#39;] == &#39;male&#39;)]</code></pre><h3 id="📌-groupby">📌 groupby()</h3>
<blockquote>
<p><strong>DataFrame.groupby(&#39;집계기준변수&#39;, as_index=)[&#39;집계대상변수&#39;].집계함수</strong></p>
</blockquote>
<ul>
<li><mark>as_index = True</mark>: 집계기준변수를 인덱스로 사용</li>
<li><mark>as_index = False</mark>: 집계기준변수를 인덱스가 아닌 열로 사용 → 행 번호를 기반으로 한 정수 값이 인덱스로 설정</li>
</ul>
<ul>
<li>[[&#39;data&#39;]].sum()과 같이 하면 열이 여럿이라는 의미여서 결과가 <strong>데이터프레임</strong>이 됨</li>
<li>여러 열 집계<ul>
<li><strong>[ [&#39;feature1&#39;, &#39;feature2&#39;] ].sum()</strong> 형태와 같이 집계 대상 열을 리스트로 지정</li>
</ul>
</li>
<li><strong>by=[&#39;feature1&#39;, &#39;feature2&#39;]</strong> 과 같이 집계 기준 열을 여럿 설정 가능</li>
</ul>
<pre><code class="language-python"># Embarked 별 Fare 평균 → 시리즈
data.groupby(&#39;Embarked&#39;, as_index = False)[&#39;Fare&#39;].mean()

# 여러열 집계
# Embarked, Sex 별 Fare 평균과 Age 평균 → 데이터프레임
data.groupby([&#39;Embarked&#39;,&#39;Sex&#39;], as_index = False)[[&#39;Fare&#39;,&#39;Age&#39;]].mean()

# sum() 메소드 앞에 아무 열도 지정하지 않으면 기준열 이외의 모든 열에 대한 집계가 수행
# Embarked 열 이외의 모든 열에 대한 집계가 수행
data.groupby(&#39;Embarked&#39;, as_index=False).sum()

</code></pre>
<h4 id="✔️agg메소드-agg">✔️agg()메소드: <strong>.agg()</strong></h4>
<ul>
<li>열 하나에 대해 합계, 평균 등의 집계를 한 번에 수행 가능</li>
<li>여러 열에 대해 여러 집계를 한 번에 수행 가능</li>
<li>집계 대상 열과 집계 방법을 리스트 형태로 지정<pre><code class="language-python"># 객실등급(Pclass)별, 생존여부(Survived)별 나이(Age), 운임(Fare)의 최대, 최소, 평균, 표준편차
data.groupby([&#39;Pclass&#39;,&#39;Survived&#39;], as_index = False)[[&#39;Age&#39;,&#39;Fare&#39;]].agg([&#39;max&#39;, &#39;min&#39;, &#39;mean&#39;, &#39;std&#39;])</code></pre>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>