<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>b-jayu.log</title>
        <link>https://velog.io/</link>
        <description>데이터분석&amp;엔지니어링이 가능한 AI 서비스 개발자를 꿈꿉니다:)</description>
        <lastBuildDate>Fri, 01 Dec 2023 05:18:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>b-jayu.log</title>
            <url>https://velog.velcdn.com/images/b-jayu/profile/f69fe38a-9536-495f-a7f8-a2a697bce78e/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. b-jayu.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/b-jayu" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[에이블스쿨 설명회 듣고 학점도 에이쁠 받자~!!!(+update 커피 트럭 이벤트)]]></title>
            <link>https://velog.io/@b-jayu/%EC%97%90%EC%9D%B4%EB%B8%94%EC%8A%A4%EC%BF%A8-%EC%84%A4%EB%AA%85%ED%9A%8C-%EB%93%A3%EA%B3%A0-%ED%95%99%EC%A0%90%EB%8F%84-%EC%97%90%EC%9D%B4%EC%81%A0-%EB%B0%9B%EC%9E%90</link>
            <guid>https://velog.io/@b-jayu/%EC%97%90%EC%9D%B4%EB%B8%94%EC%8A%A4%EC%BF%A8-%EC%84%A4%EB%AA%85%ED%9A%8C-%EB%93%A3%EA%B3%A0-%ED%95%99%EC%A0%90%EB%8F%84-%EC%97%90%EC%9D%B4%EC%81%A0-%EB%B0%9B%EC%9E%90</guid>
            <pubDate>Fri, 01 Dec 2023 05:18:39 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/b-jayu/post/550b5e80-4c9d-4b17-81d0-f3fdb9e5ba0e/image.jfif" alt=""></p>
<p>졸업을 앞두고 있는 4학년 학생들 주목!!!!
그쪽도 에이블스쿨을 아십니까?
혹시, 몰라서 에이블스쿨🏫 1회차 모집 설명회를 듣지 못하셨다구요?
괜찮습니다~ 다가오는 다음주 화요일 12월 5일(화) 14시에 KT 에이블스쿨이 다시 한 번 여러분을 찾아갑니다😁</p>
<p>사전신청을 하지 않으신 분들도 QR코드를 통해 참여 가능하다니, 
위의 QR코드를 통해 KT 에이블스쿨 톺아보기 하러 가실까요?</p>
<p>어?! 잠깐!!
에이블 스쿨 입학 지원서는 어떻게 작성하냐구요?
에이블 스쿨 홈페이지(<a href="http://aivle.kt.co.kr)%EC%97%90">http://aivle.kt.co.kr)에</a> 접속하시면 지원서를 작성할 수 있습니다. 
이 때, 지원서 하단에 추천 아이디 칸에 <strong>a044075</strong> 를 기재하는 것도 놓치지 마세요!!!</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e845ad57-efa3-4189-9f57-f31cc64b055b/image.png" alt=""></p>
<p>그리고 추가된 아주 뜨끈뜨끈한 소식!!!! 
에이블 스쿨이 더 많은 대학생들과 만나기 위해, 커피 트럭 이벤트 2차를 오픈합니다😁</p>
<p>그동안 우리학교에 안와서 에이블 스쿨에 섭섭하셨다구요? 😭
서운하셨던 예비 에이블러님들을 달래줄 에이블 커피트럭이
12월 4일에는 전북대와 울산대
12월 5일에는 강릉원주대와 인천대
그리고 12월 6일에는 충북대와 한동대를 찾아갑니다~</p>
<p>에이블 스쿨이 쏘는 커피도 마시고~ 에이블 스쿨 지원하는 것도 잊지 마세요!!!
다들 아시죠? 커피 먹튀는 금지입니다ㅎㅎ</p>
<p>그럼 다들 에이블스쿨에서 만나요🙌</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 정규 강의 Step을 마치며...]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-School-%EC%A0%95%EA%B7%9C-%EA%B0%95%EC%9D%98-Step%EC%9D%84-%EB%A7%88%EC%B9%98%EB%A9%B0</link>
            <guid>https://velog.io/@b-jayu/AIVLE-School-%EC%A0%95%EA%B7%9C-%EA%B0%95%EC%9D%98-Step%EC%9D%84-%EB%A7%88%EC%B9%98%EB%A9%B0</guid>
            <pubDate>Tue, 28 Nov 2023 06:59:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/b-jayu/post/4089f2a6-d670-4592-909b-3cb14a6915e0/image.png" alt="">
에이블 스쿨을 함께하고 있는, 4기 에이블러 여러분~ 에이블 기자단 블루저스트 입니다.</p>
<p>이번주는 11월을 마무리하고, 새로운 12월을 맞이하는 주간이자, 에이블 스쿨에 마지막 정규 강의가 있습니다.
에이블 스쿨에 입학한 것이 엊그제 같은데, 수업이 끝나고 7차 미니프로젝트, 빅 프로젝트만 남았다니 믿기지 않는 것 같습니다. 
오늘은 새로운 소식을 전달해드리기 보다는, Step2 정규 강의를 마무리한 저의 느낌과 회고를 담은 내용을 전달해 드릴까 합니다.</p>
<p>8월 8일~  첫 에이블스쿨 오프닝 데이
저는 누구보다 설레는 마음을 에이블스쿨을 준비했던 것 같습니다. 
좋은 커리큘럼과 좋은 사람들을 만날 수 있다는 기대감에 가득 안고 같은 반 에이블러님들과 하루 빨리 친해지고 싶었답니다ㅎㅎ 그러다가... 기자단까지 이어져 버렸네요?^^</p>
<p>저는 9월 부터는 에이블스쿨과 함께 새로운 대외활동에도 참여하기 시작했습니다. 
에이블 스쿨 이전에는 데이터 분석 엔지니어가 되고 싶었던 저였는데요? 단순히 데이터 분석 뿐만 아니라, 머신러닝/딥러닝 기술을 결합하여 데이터를 기반으로 문제를 해결하고, 개인 맞춤형 AI 시대를 열어가는 서비스 기획자가 되고 싶어졌답니다. 그래서 에이블스쿨 뿐만 아니라, 서울에서 하는 대외활동, 그리고 제 꿈을 실현하기 위해 취업준비에도 끊임없이 도전하였습니다.</p>
<p>풍성한 한가위를 지나고, 10월이 되었을 때는 단연 8반 에이블러님들과는 많은 대화를 나누면서 두터운 정을 쌓아나갔습니다. 소극적이지만 늘 장난기가 있어서 일부러 장난도 치고 말도 걸었던 저인데~ 저를 불편해하지 않고 다가와줬던 8반 에이블러님들, 그리고 대구경북 8반 매니저님들께 감사함을 전하고 싶습니다. 에이블 스쿨을 지내오다보니 처음 다짐했던 만큼 뜻대로 이루어지지 않을 때도 있었는데, 함께 공감해주고, 격려도 해주고, 지치고 힘들 때 함께 술잔을 기울여줬던 에이블러 친구도^^ 다들 엄청 고맙습니다.</p>
<p>의욕을 살짝 잃어갈뻔한 11월, 에이블 스쿨은 결코 에이블러님들을 놓지 않습니다. 
이거 왠걸? 에이블러님들이라면 누구나 욕심날 AICE 자격시험!!!
AICE 자격시험은 11월 첫째주, 저희의 첫번째 에이블 데이의 시작을 밝혀주었는데요? 다들 열심히 보셨나요?
이 글을 쓰고 있는 오늘은, AICE 자격시험 결과가 발표된 지 꽤 시간이 흘렀을 때입니다ㅎㅎ
다들 열심히 하셨다면, 무리없이 취득하셨겠죠?! 저의 결과는... 노.코.멘.트 하겠습니다^^;;ㅎㅎㅎ (궁금하면 500원~)</p>
<p>에이블 데이가 끝나고, AI트랙의 경우에는 STEP2. WEB/Django 수업이 오늘까지 이어져 오고 있습니다. 
사실 저는 Web 개발 경험이 없어서... 수업 따라가기가 솔직히 어렵습니다ㅠㅠ 다들 잘 따라가고 계신가요?
8반 에이블러님들 !! 미니 프로젝트때 저 많이 가르쳐주세요ㅋㅋㅋㅋㅋㅋ 여러분의 도움이 필요합니다ㅎㅎㅎ</p>
<p>지난 4개월동안 저는 에이블스쿨과 함께 대외활동, 취업준비를 병행하느라 지치고 피곤하고 풀어진 모습들을 많이 보였던 것 같습니다. 지나고 보니 그 때 조금 더 열심히 임하지 못했을까 아쉬움이 남습니다. 그래도 지난 4개월동안 가장 큰 수확은 대구경북 AI 8반 에이블러님들과 매니저님이 아닐까요?ㅎ 좋은 사람들을 알게 되고 만나게 되서 의미있는 시간이었던 것 같습니다.</p>
<p>이제 정신차리고!! 여러분 내일부터 7차 미니프로젝트에욥!! 감성에 젖어 허우적 거릴 시간이 없어룝
7차 미프 끝나고 쉬어가자구요? 말도 안되는 소리~ 기다리고 기다리던 빅 프로젝트가 오픈합니다.
여러분 정신 바짝 차리시고, 우리 함께 미니프로젝트와 빅 프로젝트를 완수하고 수료하는 그 날까지 열심히 화이팅해봅시다. </p>
<p>재미난 대구경북 AI 8반의 에이블데이 소식이 궁금하시다면 에이블스쿨 카페(<a href="https://cafe.naver.com/aivleschool/609)%EB%A5%BC">https://cafe.naver.com/aivleschool/609)를</a> 많이 클릭해주시고 좋아요와 댓글 부탁드려요~</p>
<p>다음번에는 더 알찬 7차 미니프로젝트 소식과 빅 프로젝트로 찾아오겠습니다:)
다들 감~기 조심하세요</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[🎊KT AIVLE School 5기 모집(+친구 추천 이벤트)🎉]]></title>
            <link>https://velog.io/@b-jayu/KT-AIVLE-School-5%EA%B8%B0-%EB%AA%A8%EC%A7%91%EC%B9%9C%EA%B5%AC-%EC%B6%94%EC%B2%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8</link>
            <guid>https://velog.io/@b-jayu/KT-AIVLE-School-5%EA%B8%B0-%EB%AA%A8%EC%A7%91%EC%B9%9C%EA%B5%AC-%EC%B6%94%EC%B2%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8</guid>
            <pubDate>Mon, 20 Nov 2023 09:35:57 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/b-jayu/post/3f0029fd-8236-4161-9b1b-1a5b2a406271/image.png" alt=""></p>
<p>안녕하세요👋 새로운 빅 뉴스를 전달해드릴 에이블기자 BlueJust입니다.😆
여러분의 성원에 힘입어 에이블 스쿨이 5기 과정을 오픈하게 되었습니다.🎉</p>
<p>제가 엊그제 에이블 스쿨에 입학한 것 같은데, 저 벌써 졸업해야 하나요?😢
4기는 저물어가지만, 5기의 태양은 이제 떠오를테니~
예비5기 에이블러님들!! 집중집중🏫</p>
<p>지금부터 KT AIVLE School에 대해 톺아보도록 하겠습니다.</p>
<p>KT 에이블 스쿨은 대한민국 청년들을 기업 실무형 AI/DX 인재로 양성하고 
채용까지 연계하는 KT만의 차별화된 교육 프로그램입니다.</p>
<p>기업 실무형 교육 그 자체, 취업은 덤.
영업도, 기획도, 재무도 이제 AI는 기본, DX는 필수!
DX 교육과정은 업계 유일 KT 에이블 스쿨에서만 들을 수 있다는 사실!!
다들 알고 계신가요?🤔</p>
<p>2023년 11월 27일부터 12월 18일까지 약 3주간, 예비 5기 에이블러님들의 지원을 기다립니다.</p>
<p>그런데, KT 에이블 스쿨을 잘 모르시겠다구요? 괜찮습니다.
예비 5기 에이블러님들을 위해 준비한 모집설명회가 기다리고 있다구요😆</p>
<p>모집 설명회에서는 실시간 Q&amp;A도 진행하고 있으니, 
꼭 참석하셔서 궁금증을 해소하시길 바라겠습니다. </p>
<p>기업이 원하는 AI 개발자, DX컨설턴트가 되고 싶다면 누구나 도전할 수 있습니다.</p>
<p>4년제 대학 졸업자 또는 졸업 예정자(24년 8월 졸업예정)로 
34세 이하의 미취업 대한민국 청년이라면 누구나 지원할 수 있습니다.</p>
<p>DX과정에서도 머신러닝과 딥러닝을 배울 수 있으니, 
비전공자라고 겁먹지말고 자신있게 도전해보세요!</p>
<p>자세한 내용은 아래의 모집 공고 포스터와 함께,
에이블 스쿨 홈페이지(<a href="http://aivle.kt.co.kr">http://aivle.kt.co.kr</a>) 공지사항을 확인해 주시기 바랍니다. 
그리고 문의사항은 카카오채널(@aivleschool)도 이용가능하니 
어서 카카오친구 맺으러 같이 가볼까요~
<img src="https://velog.velcdn.com/images/b-jayu/post/6d3eb985-781a-4a3e-946e-7d56a6ad8dad/image.jpg" alt=""></p>
<p>혹시 4기 에이블러님들 에이블 스쿨과 헤어지려니 아쉬우시다구요?😭
아쉬움을 달래기 위해, 특별한 이벤트도 준비되어 있습니다. 짜잔~
바로바로~ 에이블 스쿨 친구 추천 이벤트!!!</p>
<p>5기 에이블 스쿨 모집 기간동안, 친구들에게 에이블 스쿨을 추천해주세요!!
친구의 지원서 추천인에 내 아이디가??? 10명을 추천하면 선물도 10개!!
추천 아이디는 지원서 추천 아이디 칸에 <strong>a044075</strong> 을 기재하시면 좋을듯 합니다.😆
제출한 아이디를 통해, 커피 쿠폰을 받을 수 있는 기회도 있으니
저희 다 같이 커피☕🧋~ 한 잔 할래요~🎤
<img src="https://velog.velcdn.com/images/b-jayu/post/b2162d50-99e7-46fd-9169-c6e6687e5736/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 학습스토리 - 언어지능 딥러닝(2)]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-School-%EC%96%B8%EC%96%B4%EC%A7%80%EB%8A%A5-%EB%94%A5%EB%9F%AC%EB%8B%9D2</link>
            <guid>https://velog.io/@b-jayu/AIVLE-School-%EC%96%B8%EC%96%B4%EC%A7%80%EB%8A%A5-%EB%94%A5%EB%9F%AC%EB%8B%9D2</guid>
            <pubDate>Mon, 30 Oct 2023 16:43:56 GMT</pubDate>
            <description><![CDATA[<h3 id="들어가기">들어가기</h3>
<p>주말 만큼은 절대 포기할 수 없는 에이블러 &quot;에이 블루 저스트&quot;는 검색 시스템의 검색 결과로 나온 맛집을 탐방하고 왔습니다.😊</p>
<blockquote>
<p>꺼억~ 맛있게 먹었으니 이제 리뷰를 써볼까나? 
그런데? 리뷰에 긍정적인 내용도 있고, 부정적인 내용도 있잖아? 내용만 보고 긍정인지 부정인지 어떻게 분류할 수 있을까?</p>
</blockquote>
<p>궁금한 건 그냥 지나칠 수 없는 &quot;에이 블루 저스트&quot;는 이번 시간에 기본적인 자연어 전처리 기술과 감정분류에 대해 배우러 에이블스쿨을 방문해봅니다.</p>
<h3 id="nlp">NLP</h3>
<p>자연어 처리는 언어학, 컴퓨터 과학, 인공지능의 하위 분야입니다. 
컴퓨터와 인간의 언어 사이의 상호작용에 관여하고, 특히 많은 양의 자연어 데이터를 처리하고 분석하기 위해 컴퓨터를 프로그래밍하는 방법을 NLP 이라고 합니다.
이 기술을 통해 문서에 포함된 정보와 통찰력을 정확하게 추출 할 수 있을 뿐만 아니라 문서, 문장 자체를 분류하고 구성할 수 있습니다. </p>
<h4 id="텍스트-데이터의-특성">텍스트 데이터의 특성</h4>
<p>텍스트 데이터는 시계열 데이터의 기본 성질을 같습니다. 텍스트 정보가 시간 정보를 갖는다는 의미가 쉽게 와닿지 않을 수도 있는데요? 이는 단어가 나타나고 있는 위치가 중요함을 의미하며, 텍스트 데이터는 샘플마다 길이가 다르다는 시계열적 특성을 가지고 있습니다. 
텍스트 데이터는 형태소 분석이 필요하고, 구문론과 의미론과 같은 언어학적 이론개념을 바탕으로 접근이 필요합니다. 언어마다 가지고 있는 다른 특성을 이해하고, 딥러닝 모델을 활용하여 예측, 분류하기 위해서는 기호를 수치로 변환하는 작업도 필요합니다. </p>
<h3 id="linear-regression">Linear Regression</h3>
<p>감정을 긍부정으로 분류하기 위해서는 분류 기준을 확립하는 일, 그리고 데이터와 레이블(클래스) 별 경향성을 이해할 필요가 있습니다. 
그래서 먼저 기본적인 선형 회귀를 이해해보도록 하겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/8712a26a-b3bf-4c1f-8ebe-70f7558e0d8e/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/2b6d1b62-95c6-4c18-8759-a33308834613/image.png" alt=""></p>
<p>선형 회귀는 말 그대로, 선형적인 경향성을 알아보기 위해 사용할 수 있는 가장 기본적인 회귀모델입니다. 
실제 세계에서 발생하는 모든 데이터를 통과하는 하나의 직선을 표현해보세요~ 라고 문제가 주어진다면 여러분은 표현하실 수 있으실까요? 아마 이는 불가능에 가까울 것입니다. 이렇게 때문에, 비교적 오차정도를 적게 하는 직선을 회귀선으로 표현하기에 이르렀고, 이 과정에서 등장하게 된 것이 Cost Function (손실함수) 입니다. 
<img src="https://velog.velcdn.com/images/b-jayu/post/f67185e0-64d4-42f5-b778-2cd73a4c58e5/image.png" alt=""></p>
<p>오차(Error) 라고 하는 것은 예측값과 실제값의 대소비교에 따라, 음수가 될수도 양수가 될수도 있습니다. 양수 오차와 음수 오차 값이 누적되어 0의 가까운 값에 수렴했다고 한다면, 과연 이 모델은 오차가 적은 좋은 모델일까요? </p>
<p>이러한 의문점을 해결하기 위해, 자승법을 활용한 MSE(Mean Squared Error)가 등장하게 됩니다.
<img src="https://velog.velcdn.com/images/b-jayu/post/70208eed-6ab2-4a83-8633-f31e46cf5789/image.png" alt=""></p>
<p>선형 회귀 함수는 1차함수이기 때문에, 이를 제곱하게 되면 convex한 2차 함수가 됩니다. 2차 함수에서의 최소값은 미분을 활용하여 기울기 값으로 최소지점을 찾을 수 있습니다.</p>
<h3 id="binary-classification">Binary Classification</h3>
<p>단순한듯 보이는 이진분류는 딥러닝 문제 해결에 다수 사용되고 있습니다. 
실생활에서 메일의 스팸여부를 탐지하거나, 신용카드 사기 거래 탐지, 그리고 방사선 이미지에서 종양의 인식하여 양성인지 음성인지 분류하는 질병여부 예측에도 활용되고 있습니다.</p>
<p>앞서, Linear Regression을 통해 선형적인 경향성을 알아보는 시도를 해보았습니다. 이제 이 결과를 활성화함수를 이용하여 0인지 1인지, 또는 음성인지 양성인지, 긍정인지 부정인지 분류하는 원리를 이해해보겠습니다.</p>
<p>선형 회귀모델은 1차식 형태이기 때문에 제곱할 경우 2차 함수 형태가 되어, 미분해서 최소점 찾기가 가능합니다. 그러나, 이진 분류에서 사용되는 활성함수인 시그모이드 계열의 함수는 그렇지 않습니다. 
<img src="https://velog.velcdn.com/images/b-jayu/post/8b2e9959-9756-44c7-ab29-768edb5bd965/image.png" alt="">
시그모이들 계열 함수에서 최소점을 찾을 수 있는 새로운 Cost Function이 필요합니다.
<img src="https://velog.velcdn.com/images/b-jayu/post/1ece3d34-2a5b-4995-967f-e089e01a745b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/f37141ba-04a4-40e1-879f-affac7a63b57/image.png" alt=""></p>
<h3 id="word-embedding">Word Embedding</h3>
<p>문장을 보고 이진분류를 하기 위해서는, 문장에 나타나고 있는 단어의 의미를 수치화하는 작업을 수행해야 합니다. 이미 이와 관련하여 One-hot Encoding을 배운 적이 있습니다. 이에 대한 내용을 정리하고 넘어가도록 하겠습니다. 
<img src="https://velog.velcdn.com/images/b-jayu/post/d46836cd-8f09-4c65-8e2c-3cd40628ca23/image.png" alt="">
워드 임베딩 방식은 사전 크기가 크면, 희소 벡터가 되어 메모리 낭비가 심하게 됩니다. 그리고 단어 사이의 연관 관계를 반영하지 못하기 때문에, 단어의 의미를 저차원 공간 벡터로 표현하고 신경망 학습을 통해 의미를 알아내는 방식을 사용합니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School]기자단이 찾아간다 - 4차 미니프로젝트 @ TIMESQUARE]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-School%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-4%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-TIMESQUARE</link>
            <guid>https://velog.io/@b-jayu/AIVLE-School%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-4%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-TIMESQUARE</guid>
            <pubDate>Fri, 27 Oct 2023 05:29:37 GMT</pubDate>
            <description><![CDATA[<p>안녕하십니까? 신속하고(?) 정확한(?) 에이블 소식을 전하는 기자단 블루저스트 입니다.
4차 미니프로젝트가 끝난 지 한참됐는데, 왜 이제 소식을 전하냐구요? 전혀 신속하지 않다구요? 
음... 월말되서 한번 더 되새김질 하려고 일부러 그런거에요^^ 
절.대. 게을러서(?) 이러는거 아닙니다!! 암튼 그래요</p>
<p>AI반은 다가올 AIVLE Day를 앞두고 4,5,6차 미니프로젝트를 연속적으로 수행하게 됩니다. 저는 개인적으로 수업을 들을 때보다, 미니프로젝트 시간이 더 빠르게 지나가고 집중도가 높아지는 것 같아 프로젝트가 더 재미있는 것 같습니다. 그래서 저희 8반 에이블러님들이 보다 대면 교육장을 와서 프로젝트 하실 수 있도록 적극 권장해드리고 있습니다. 그렇다면 과연 대구/경북 8반 에이블러님의 4차 미니프로젝트는 어떠했는지 그 현장을 파헤쳐 보도록 하겠습니다.</p>
<p>4차 미니프로젝트가 시작하던, 10월 16일 월요일 아침 한티역에서 바라 본 롯데타워입니다.
<img src="https://velog.velcdn.com/images/b-jayu/post/16b5ebbb-3bc6-401e-89c6-335d3863f1ff/image.jpeg" alt="">
근데 저 대구사람 아니냐구요?( 나 사실은 경북사람이다 ) 근데 왜 서울있냐구요?
사실 저희 AI 대구/경북 8반에는 본가가 서울지역이신 에이블러님이 계십니다. 교육장과 집의 거리가 자그마치 300여 km... 그래서 아직 KT북대구 교육장을 한 번도 오지 못하셨습니다. 열심히 오시라고 설득(?)을 해보았지만 과연 그 바램이 이루어질지 다들 기대해주세요😛</p>
<p>에이블러님을 만나러, 한티역에서 영등포역으로 이동을 해봅니다.
서울은 역시 지하철도 복잡하고, 길도 복잡하고, 사람도 복잡하고, 제 머릿속도(?) 복잡합니다... 그쵸?
오랜만에 뵙는 에이블러님과 프로젝트를 하려니깐, 오전시간을 너무 토의하는 데 써버렸지 뭡니까ㅎㅎㅎ 그래서 후다닥 점심먹으러 갔습니다. <img src="https://velog.velcdn.com/images/b-jayu/post/9308b1ae-88fe-4464-8a2b-d57871fb8075/image.jpeg" alt="">
갬성이 부족해서, 음식 나올 때 찍지 못하고 먹던 중에 찍었어요~ 
음식이 보기와 같이(?) 너무 맛있었습니다. (맛있어 보이나요?😅) 교자도 시켰는데 겉바속촉한 맛에~ 시간가는줄 모르고 점심시간을 즐겼답니다ㅎ</p>
<p>오후 시간은 인근 영등포 타임스퀘어서 조별 미팅을 가지기로 하였습니다. <img src="https://velog.velcdn.com/images/b-jayu/post/d0dc6f0d-d905-470e-b974-5c2cfa5f4163/image.jpeg" alt="">
서울까지 가서 프로젝트 하는거라... 기념샷으로 옆에 계신 에이블러님이랑 같이 사진을 찍고 싶었는데 🧐 아직 어색해서 그렇게까진 못하겠더라구요?
( 우리 어색한 거 맞지? dududududududuh.... oho?🤥)
조별미팅 하면서 조원들한테 서울 구경 시켜줬습니다.( 애두롸~ 나 서울왔다 )</p>
<p>4차 미니프로젝트는 AIVLE EDU 사이트에 올라오는 질의를 적절한 카테고리에 분류하는 자연어 분류 학습을 진행하였습니다. 
수업 때 듣지 못했던 다양한 언어 전처리 알고리즘들이 난무하던 터라, 에이블러님들 사이에서도 가장 어려웠던 미니프로젝트로 손꼽히고 있습니다.
기회가 된다면, 4차 미니프로젝트 자연어 알고리즘을 정리하는 컨텐츠를 작성해보도록 하겠습니다.</p>
<p>여러분... 글 써내려 갈 소재가 바닥나버렸네요?
그럼 저도 이만 퇴근을 해봐야겠지요?<img src="https://velog.velcdn.com/images/b-jayu/post/7134a770-9348-4257-8549-a061bdbb2f6f/image.png" alt=""></p>
<p>영등포역은 또 난생 처음이라... 길을 잃으면 집에 못가잖아요?
그래서 옆에 계신 에이블러님께 역까지 바래다달라고 부탁드렸습니다ㅋㅋㅋㅋㅋㅋ
생각보다 순순히 잘 바래다주시더라구요ㅎ 덕분에 에이블러님의 스윗함(?)을 느낄 수 있었던 시간이었습니다.
( 사실... 그냥 혼자가도 될뻔했더라구요... 마 영등포 ⭐️거 없네 )</p>
<p>암튼 저날 쥐도새도 모르게~ 집가서 바로 기절해버려 푹 잤다는 소식입니다.</p>
<p>다음에 더 재미나고 특별한 소식으로 다시 돌아오겠습니다. ㅃ2</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 기자단이 찾아간다 - 시월의 코딩스터디]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-School-%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-%EC%8B%9C%EC%9B%94%EC%9D%98-%EC%BD%94%EB%94%A9%EC%8A%A4%ED%84%B0%EB%94%94</link>
            <guid>https://velog.io/@b-jayu/AIVLE-School-%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-%EC%8B%9C%EC%9B%94%EC%9D%98-%EC%BD%94%EB%94%A9%EC%8A%A4%ED%84%B0%EB%94%94</guid>
            <pubDate>Thu, 12 Oct 2023 14:53:21 GMT</pubDate>
            <description><![CDATA[<p>긴 추석 연휴를 마치고 10월의 에이블스쿨이 찾아왔습니다.
9월에는 에이블 스쿨의 1차 코딩 마스터즈가 진행되었는데요~ 열심히 코딩 공부를 한 에이블러들이 실력을 맘껏 뽐낼 수 있는 1차 코딩 테스트도 진행되었습니다. 
(에이블러 여러분~ 코테 잘 보셨나요? ^^;;; 저는 아숩게도 3번 문제를 제출하지 못하였...습니다ㅎㅎ)</p>
<p>그러나, 코딩 테스트를 못봤다고 좌절하기엔 이르죠?
부족한 실력을 보완하고자 대구/경북 AI에이블러님들은 열심히 코딩스터디를 시작하였다고 하는데~ 그 현장으로 가보도록 하겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/2c5457ce-4ac1-4d04-b205-e5604c0bc8b0/image.jpg" alt=""></p>
<p>10월 12일(목) AI트랙은 4차 미니프로젝트가 시작되었습니다. 미니 프로젝트 하느라 고생했을 에이블러님들~ 프로젝트를 하느라 지쳤을텐데, 교육장 인근 카페에서 열심히 코딩스터디를 진행했다고 합니다.</p>
<p>1일 1문제 라는 목표를 가지고 임했던 첫 코딩 스터디<del>!!!
엄청난 열정을 태우느라 시간 가는줄 몰랐다고 합니다^^ (열정과다)
병주 에이블러님과 진규 에이블러님과 함께한 첫 코딩 스터디에서 각자 백준 골드티어문제를 자그마치 3문제씩이나 해결했습니다. 
( 너무 신난 진규 에이블러님의</del> 브이 v^^ )</p>
<p>저녁식사도 함께하며 친목을 다지고, 19:00 ~ 22:00(3시간) 동안 진행된 코딩스터디에서 다들 엄청난 집중력을 보여주셨던 것 같습니다.
부디 작심삼일이 되지 않기를 기원하며~ 시월의 코딩스터디 소식은 여기서 마치겠습니다.</p>
<p>다음에 더 다양한 소식으로 에이블 기자단이 찾아오겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 학습스토리 - 언어지능 딥러닝(1)]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-School-%EC%96%B8%EC%96%B4%EC%A7%80%EB%8A%A5-%EB%94%A5%EB%9F%AC%EB%8B%9D1</link>
            <guid>https://velog.io/@b-jayu/AIVLE-School-%EC%96%B8%EC%96%B4%EC%A7%80%EB%8A%A5-%EB%94%A5%EB%9F%AC%EB%8B%9D1</guid>
            <pubDate>Tue, 26 Sep 2023 02:39:47 GMT</pubDate>
            <description><![CDATA[<h3 id="들어가기">들어가기</h3>
<p>주말 만큼은 절대 포기할 수 없는 에이블러 &quot;에이 블루 저스트&quot;는 핫플레이스와 맛집을 찾아가기 위해 오늘도 N✌️버, 인⭐gram 에 키워드 검색을 시작합니다😊</p>
<blockquote>
<p>어라? 근데 이런 검색 시스템은 어떻게 자연어를 처리하는거야?</p>
</blockquote>
<p>궁금한 건 그냥 지나칠 수 없는 &quot;에이 블루 저스트&quot;는, 검색 시스템의 원리를 알아보기 위해 에이블 스쿨을 방문하기로 결심합니다.</p>
<h3 id="tf-idf">TF-IDF</h3>
<h4 id="tf-idf-1">tf-idf</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/71d134ca-af56-4267-933c-e73768efc898/image.png" alt=""></p>
<p>키워드를 입력했을 때, 관련 문서들이 검색 결과로 나타나는데 이 순위는 과연 어떻게 결정되는 것인지 궁금했던 적이 있었습니다. 
입력한 키워드와 문서 내 단어들의 중요도를 고려하여 결과가 나온다니 무척 놀라울 따름입니다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/9f1c6c16-5019-4186-9f2b-dcb3d74838e8/image.png" alt=""></p>
<p>TF-IDF 계산을 위해서는 문서 내의 Term Matrix를 만들게 됩니다.
각 문서마다, Term의 출현빈도(Term Frequency)와 역 문서 빈도(Inverse Document Frequency, IDF)를 곱하여 단어마다 TF-IDF 가중치를 부여할수 있습니다. 이를 수식으로 표현하면 아래와 같이 표현할 수 있습니다.</p>
<p>$$TF-IDF = TF * IDF$$</p>
<p>여기서, IDF가 와닿지 않는다구요?
우리가 sns에 맛집 검색을 할 때, 정말 맛집으로 소문난 핫플레이스 식당만 결과로 나오기 원하는데, 모든 식당이 &quot;맛집&quot;이라고 소개해주면 과연 효과적인 검색 결과라고 할 수 있을까요?
해당 키워드로 반환되는 문서 수가 많을 수록, 해당 키워드는 중요도가 떨어지는 키워드라고 할 수 있습니다. </p>
<h4 id="단어-표현---word-representation">단어 표현 - Word Representation</h4>
<p>사람은 자연어를 입력하게 되지만, 컴퓨터는 자연어를 이해하기 위해 어떤 과정을 거치나요?
자연어 처리 모델에 적용하기 위해서는 <strong>자연어 텍스트를 수치화</strong>하여 표현해야 합니다.</p>
<p>머신러닝, 딥러닝에서 자연어로 표현된 Categorical Data를 수치화 하는 방법으로 One-hot encoding 방식을 배운적이 있습니다. 
아하<del>One-hot Encoding을 적용하면 되겠군요? Umm</del> 안! 됩니다.</p>
<p>One-hot Encoding은 모든 단어의 개수를 알아야 단어의 차원을 결정할 수 있습니다. 운 좋게 모든 단어의 개수를 알았다고 생각했는데... 새로운 단어가 추가되었습니다🙄
모든 단어 벡터의 차원을 증가시켜야 하는 문제점이 발생합니다. 또, 특정 단어에만 1로 mapping되는 one-hot encoding 특성상 단어의 의미나 특성을 자세히 표현할 수가 없습니다. 
이처럼 One-hot Encoding은 단어의 수가 매우 많은 경우, 벡터 수정이 어렵고 고차원 저밀도 벡터로 표현하게 된다는 문제점을 가지게 됩니다.
이를 해결하기 위해, <strong>저차원에서 고밀도로 표현할 수 있는 word-embedding</strong> 방식을 앞으로 배워나가게 됩니다.</p>
<h4 id="딥러닝-기반의-유사도-판단---jaccard-cosine-euclidean-manhattan">딥러닝 기반의 유사도 판단 - Jaccard, Cosine, Euclidean, Manhattan</h4>
<p>단어 표현을 벡터화한 후, 문장 간의 유사도를 벡터 유사도를 측정하여 확인할 수 있습니다. 대표적인 유사도 측정 방식에는 Jaccard 유사도, 코사인 유사도, 유클리디언 유사도, 맨해튼 유사도 등이 있습니다. </p>
<p>먼저, 자카드 유사도 입니다.
자카드 유사도는 두 문장을 각각 단어의 집합으로 만들어서 전체 라벨(합집합) 중에서, 각 벡터에 요소가 같은지와 그리고 어떤 라벨인지 식별한 후 계산을 하게 됩니다. 
<img src="https://velog.velcdn.com/images/b-jayu/post/e8563677-8f94-4ecc-9c6a-cd8a5fa53504/image.png" alt=""></p>
<p>두 번째, 코사인 유사도는입니다. 
코사인 유사도는 두 개의 벡터값에서 코사인 각도를 계산합니다. 삼각함수에서 코사인 함수의 결과값의 범위는 [-1, 1] 이기 때문에, 코사인 유사도 값도 [-1, 1] 값을 가지게 됩니다.
<img src="https://velog.velcdn.com/images/b-jayu/post/455c7dc3-1e53-416d-8a25-766083cd96a3/image.png" alt=""></p>
<p>마지막으로, 유클리드 유사도와 맨해튼 유사도가 있습니다.
두 유사도 방식은 두 벡터 간의 거리로 유사도를 판단하게 됩니다. 
그러나, 유클리디언 유사도는 두 벡터간의 직선 거리 차이를 구하는 방식이라면, 맨해튼 유사도는 두 벡터 요소별 절댓값 거리의 합을 의미하기 때문에 결과값에 차이가 있음에 유의하셔야 합니다. 
<img src="https://velog.velcdn.com/images/b-jayu/post/86f28e4a-e476-4e08-9299-593171ba25cc/image.png" alt=""></p>
<h3 id="비지도학습">비지도학습</h3>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/5b2fa9f5-c1bf-466b-a658-1128f8281060/image.png" alt=""></p>
<h4 id="분류-vs-군집화">분류 vs. 군집화</h4>
<p><strong>분류</strong>는 지도학습의 한 종류로, 사전 분류된 instances를 기반으로, 새로운 instance의 label을 예측하는 학습 방식을 의미합니다.
<strong>군집화</strong>는 라벨링 되지 않는 데이터 셋에서 자연스러운 군집을 찾는 비지도 학습 방식입니다. 
라벨의 유무에 따라서 지도vs비지도 학습의 차이를 명확히 이해할 수 있습니다.</p>
<h4 id="k-means-알고리즘">K-means 알고리즘</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/72c93dd7-fefe-443a-8efa-df35b77e71fd/image.png" alt="">
K-means 알고리즘의 작동 원리는 다음과 같습니다.</p>
<ol>
<li>데이터 중 랜덤하게 k(군집의 개수)개의 샘플을 추출하여, 각 군집의 centeroid 초기 평균값으로 지정합니다.</li>
<li>각 데이터와 각 평균의 사이 거리를 계산하여, 가장 가까운 클러스터 군집에 할당시킵니다. </li>
<li>모든 데이터의 할당이 완료되었다면, 각 군집별 평균(centeroid)를 다시 계산합니다.</li>
<li>군집의 변화가 없을 때 까지 2-3번의 과정을 반복 시행합니다.</li>
</ol>
<p>해당 알고리즘을 활용하면, 적절히 군집을 나눌 수 있을 것 같습니다. k-means는 완벽한 군집 알고리즘일까요?
그렇지 않습니다! 1번째 과정에서 각 군집의 평균값을 <strong>임의로</strong> 설정하였던 것 기억하시나요?
K-means 알고리즘은 처음에 지정하는 중심점의 위치를 무작위로 결정하기 때무에, 최적의 클러스터롤 묶어주는 데에 한계가 존재할 수 있습니다.</p>
<h4 id="k-nearest-neighbor-algorithms">K-Nearest Neighbor algorithms</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/6349d503-6956-4228-8c1b-47758d59d16a/image.png" alt=""></p>
<p>알고리즘 이름에서 알 수 있듯, 가장 가까운 이웃을 찾는 알고리즘입니다. 
여기서 K는 개수, 제일 가까운 이웃을 몇 개나 뽑아낼 것인지를 나타내는 변수이며, 거리가 가장 가까운 k개의 데이터들을 뽑아 어떤 분류에 해당하는지 알아낼 수 있습니다. 최근접 k개의 데이터 중 어떤 class의 데이터가 가장 많은가에 따라 새로운 데이터의 군집, label이 결정되는 분류 및 군집 알고리즘입니다.</p>
<h3 id="rss-정보검색-시스템-구현하기">RSS 정보검색 시스템 구현하기</h3>
<p>먼저, 학습에 필요한 라이브러리 및 패키지를 설치해야 합니다</p>
<pre><code class="language-python">import feedparser 
from newspaper import Article
from konlpy.tag import Okt 
from collections import Counter 
from operator import eq method
from bs4 import BeautifulSoup </code></pre>
<pre><code class="language-python">urls = [&quot;http://rss.etnews.com/Section901.xml&quot;,
        &quot;http://rss.etnews.com/Section902.xml&quot;,
        &quot;http://rss.etnews.com/Section903.xml&quot;,
        &quot;http://rss.etnews.com/Section904.xml&quot;]</code></pre>
<p>모든 RSS파일에서 기사의 제목과 link를 추출하는 작업을 수행해 보려고 합니다. 
제목과 link를 크롤링 함수를 작성해 보겠습니다. </p>
<pre><code class="language-python">def crawl_rss(urls):
    array_rss = []  
    titles_rss = set() 

    for url in urls: 
        print(&quot;[Crawl RSS]&quot;, url) 
        parser_rss = feedparser.parse(url) 
        for p in parser_rss.entries: 
            array_rss.append({&#39;title&#39;: p.title, &#39;link&#39; : p.link})
    return array_rss

list_articles = crawl_rss(urls)
print(list_articles)</code></pre>
<p>RSS 파일을 하나씩 탐색하여, url를 파싱한 결과를 parse_rss에 저장하도록 하였습니다. parse_rss에 있는 모든 entries/기사 선택해서 array_rss에 저장합니다:)</p>
<p>RSS파일에는 기사제목, 링크, 그리고 150자 분량의 기사내용만 있기 때문에, 상세한 기사내용을 자세히 볼 수가 없었어요ㅠㅠ
그래서 앞서 전처리한 link를 이용하여, 상세 기사내용을 뽑아보도록 하겠습니다.</p>
<pre><code class="language-python">def crawl_article(url, language=&#39;ko&#39;):
    print(&quot;[Crawl Article]&quot;, url) 
    a = Article(url, language=language) 
    a.download() 
    a.parse() 
    return a.title, a.text 

for article in list_articles:   
    _, text = crawl_article(article[&#39;link&#39;])    
    article[&#39;text&#39;] = text  
print(list_articles[0]) </code></pre>
<p>link를 타고 들어가, 그 안에 있는 title과 text를 추출하는 작업입니다.
특정 url에 있는 기사를 다운받아, parsing 작업을 수행합니다. list_articles 리스트에는 title과 link에 대한 정보 밖에 없었습니다. 그래서 마지막에 article[&#39;text&#39;] = text 를 추가하여, 제목, 링크, 본문내용을 한 눈에 저장할 수 있도록 하였습니다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 기자단이 찾아간다 - 미니프로젝트 3차]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3%EC%B0%A8</link>
            <guid>https://velog.io/@b-jayu/AIVLE-%EA%B8%B0%EC%9E%90%EB%8B%A8%EC%9D%B4-%EC%B0%BE%EC%95%84%EA%B0%84%EB%8B%A4-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3%EC%B0%A8</guid>
            <pubDate>Tue, 26 Sep 2023 01:18:21 GMT</pubDate>
            <description><![CDATA[<p>아주 뜨끈<del>한 에이블 소식이 들어왔다고 합니다.
소식을 전해줄 윾뱅주 기자를 불러 보겠습니다. 윾뱅주</del> 기자 나와주시죠?
...
...
...
...
...
...
...
...</p>
<p>네, 3차 미니프로젝트 현장에 나와있는 BlueJust 윾뱅주 기자입니다.
에이블 스쿨은 현재 3차 미니프로젝트 기간을 성황리에 마쳤습니다.<br>대구경북 AI개발자 트랙 에이블러님들은 9월 21일 ~ 9월 25일까지 주중 3일간 KT 대구경북 광역본부가 위치한 북대구 빌딩에서 프로젝트를 진행하였습니다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/7fd4417e-378b-4498-8357-67771a934499/image.png" alt="">
특히 이번 3차 미니프로젝트는 DX 에이블러님들과 함께 프로젝트를 진행하여 더욱 뜻깊은 기회였을듯 한데요~ 그 현장을 깊숙히 파헤쳐보겠습니다👀</p>
<p>이번 프로젝트 주제는 실생활의 문제를 해결하면서 사회적 약자들을 위한 기술을 배우고 응용해 볼 수 있는 주제라 모든 에이블러님들이 진지하게 프로젝트에 임하고 있다고 합니다.</p>
<p><strong>저시력자들을 위한 한국 화폐 탐지 딥러닝</strong> 기술을 프로젝트로 구현해보았답니다.
이번 프로젝트를 통해 시각장애에 대한 배경 지식을 보다 넓힐 수 있는 좋은 기회였습니다. 선천적 안구 이상이나 후천적 안구질환 등으로 인해 의학적으로 개선할 수 없는 시력장애나 시기능 장애를 겪는 분들이 있습니다. 
국내 인구의 0.5%가 겪고 있다는 시각장애... 0.5%가 작게 여겨질지 모르지만 우리 주변에 있을지 모르는 불편한 분들을 위해 배려하는 마음을 다같이 가져보는 것도 좋지 않을까요?😊</p>
<p>다소 충격적(?) 이었던 점은... 프로젝트 이전까지만 하더라도</p>
<blockquote>
<p>시각 장애인이면 무조건 점자 읽을 수 있는거 아냐?</p>
</blockquote>
<p>라고 생각했던 저였습니다.😅 그러나 시각장애인의 90%는 점자를 해독하지 못한다는 사실!!! 다들 알고 계셨나요?
한국 화폐에는 시각장애인들도 구분할 수 있는 점자표시가 있는데, 점자를 읽지 못하는 분들에게는 이런 점자 표현이 무용지물이었다니 충격이 아닐 수 없습니다.</p>
<p>저시력자분들은...</p>
<blockquote>
<p>일상생활을 하면서 화폐가 잘 구분이 되지 않아 돈을 지급할때만 되면 시간이 너무 오래 걸려 일상생활이 불편해요.</p>
</blockquote>
<blockquote>
<p>저시력자들을 위해 편리하게 빠르게 화폐를 구별할 수 있는 보조 도구가 있으면 좋겠어요.</p>
</blockquote>
<p>이 같은 일상적인 고민을 안고 살아가게 되죠~ㅠㅠ</p>
<p>현재 시각장애인용 <strong>[한국은행권 액면식별 도우미]</strong> 앱이 등장하고 활용되고 있지만, 에이블스쿨에서 배운 이미지 딥러닝 기술을 활용하여 직접 구현하는 시간을 가졌습니다. </p>
<p>스마트 폰 카메라를 이용하여, 화폐 인식하는 딥러닝 기술 구현을
대구/경북 AI 24, 25조 에이블러 분들은 협업을 통해서 기술 구현을 보여주셨습니다.
<img src="https://velog.velcdn.com/images/b-jayu/post/74e2098a-508b-430e-acdd-097f2476f48d/image.png" alt="">
 첫 프로젝트 활동에~ 이 정도 식별 성능이라면 나쁘지 않은 성과겠죠?ㅎㅎ
프로젝트를 통해 나날이 AI기술역량을 높여나가는 에이블 스쿨 에이블러들~
앞으로의 활약도 기대가 됩니다.😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AIVLE School] 기자단이 찾아간다 - 4기 합격후기 인터뷰 취재]]></title>
            <link>https://velog.io/@b-jayu/AIVLE-4%EA%B8%B0-%ED%95%A9%EA%B2%A9%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@b-jayu/AIVLE-4%EA%B8%B0-%ED%95%A9%EA%B2%A9%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Fri, 22 Sep 2023 05:20:38 GMT</pubDate>
            <description><![CDATA[<p>에이블 스쿨 합격하고 교육을 시작한지도 한달 반이 지나서 합격후기 소식을 전해드리려 합니다. </p>
<p>에이블 스쿨에는 합격후기, 스터디 및 프로젝트 활동 소식을 전하는 에이블러 기자단이 있어요~
평소 글쓰기에 재주가 없던 저는 기자단 지원이 망설여지더라구요😅
저희 반 매니저님의 권유로 기자단 활동을 시작해보려 합니다. </p>
<p>에이블 스쿨을 앞두고 있던 7월 말, 제게 특별한 기회가 주어졌는데요?
과연 그 기회를 무엇이었을까요? 두구두구두구두구🥁🥁🥁🥁</p>
<p>4기 에이블러 여러분!!!!! 혹시 이 모습 기억하시나요?🤣
<img src="https://velog.velcdn.com/images/b-jayu/post/acc9bf0b-b984-499f-9190-71a513ffd86c/image.png" alt=""></p>
<p>4기 openning day의 시작을 열었던, KT 에이블스쿨 합격자 인터뷰!!!
그 첫번째 주인공이 바로 저였다는 사실  다들 알고 계셨나요?
단지, 반별 OPENNING DAY에 영상이 재생되는 줄  알있던 윾뱅주씨...
영상을 촬영할 시기만 하더라도, 이렇게 공개적으로 얼굴이 공개될 줄은 꿈에도 몰랐었다. <del>그러나 눈빛만큼은 누가봐도 불안한 초조한 눈빛이다ㅋㅋ</del></p>
<p>제가 소속되어 있는 AI개발자 트랙에는 전국적으로 200여명의 에이블러님들이 모여 최근까지 머신러닝과 딥러닝 그리고 미니프로젝트를 수행해오고 있습니다. 학교 수업 현장에서 겪어보지 못한 컴팩트한 미니 프로젝트의 연속!!!! 
그래서 굉장히 피곤한 나날들을 보내고 있습니다.</p>
<p>미니 프로젝트를 진행할수록, 친해지는 에이블러님들을 보며~ 기쁘기도 하고^^ 벌써 제게 시시콜콜한 농담들이 많이 들어오는데요... <del>그래? 이렇게 나온다이거지? 그래 드루와드루와;;</del> ㅎㅎ 새로운 분들 만나서 인적 네트워크를 형성할 수 있어서 매우 기쁩니다😊 진짜로요</p>
<p>앞으로 교육 및 스터디활동, 프로젝트활동, 다양하고 재밌는 대구경북 AI 8반의 소식들로 다시 찾아 오겠습니다. 많은 기대(?) 부탁드립니다~</p>
<p>합격후기와 인터뷰 비하인드를 전해드린 에이블러 기자단!!! BlueJust 유병주 였습니다.(꾸벅)✌️</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML스터디] 회귀 알고리즘과 모델의 규제]]></title>
            <link>https://velog.io/@b-jayu/ML%EC%8A%A4%ED%84%B0%EB%94%94-%ED%9A%8C%EA%B7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EA%B7%9C%EC%A0%9C</link>
            <guid>https://velog.io/@b-jayu/ML%EC%8A%A4%ED%84%B0%EB%94%94-%ED%9A%8C%EA%B7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EA%B7%9C%EC%A0%9C</guid>
            <pubDate>Tue, 19 Sep 2023 17:34:32 GMT</pubDate>
            <description><![CDATA[<h3 id="intro---feature-engineering">Intro - Feature Engineering</h3>
<p><strong>특징 공학(Fatures Engineering)</strong>은 주어진 데이터에서 특징을 다루는 기술을 의미한다. 그렇다면 과연 어떻게 특징을 다루는 것일까? 🧐</p>
<p>이전에 머신러닝 모델을 이해하고 어떻게 예측 성능을 향상 시킬 수 있는지 알아야 한다. 특징은 모델 성능에 가장 큰 영향력을 미치는 요소 중에 하나이다.</p>
<p>모델 성능을 높이기 위해서 모델의 파라미터를 조정하는 방법도 있고, 가중치를 조절하는 방법도 있다.</p>
<p>그러나 무엇보다 중요한 것은 <strong>데이터</strong> 그 잡채(?) 라는 것이다. </p>
<p>그러므로, 데이터를 뚝딱뚝딱~ 해서 새로운 데이터 특징을 만드는 과정도 필요하다.</p>
<p>그러나, 이 부분은 기술만으로 설명할 수 없는 한계가 있다.</p>
<p>왜냐하면, 대상이 되는 영억에 대한 도메인 지식이 필요한 경우가 많기 때문이다. </p>
<p>다양한 산업에는 다양한 비즈니스 문제가 있기 때문에, 데이터를 둘러싼 배경지식의 이해가 필수적이다. 그래도 가이드 라인을 소개하자면</p>
<ol>
<li>모델 성능에 영향을 미칠 것 같은 새로운 변수에 대한 가설을 세운다</li>
<li>특징을 만들어낸다</li>
<li>만든 특징을 이용하여 모델의 성능을 비교해본다 </li>
<li>유의미한 결과를 이끌어내었는지 비교한다.</li>
<li>위의 과정을 반복한다.</li>
</ol>
<p>위와 같이 제시할 수 있을 것 같다 🙂</p>
<h3 id="다중-회귀">다중 회귀</h3>
<p>독립 Feature 변수 ~ Target 변수 관의 관계를 알아보는 선형 회귀를 앞서 배워보았다. 그러나 Target 변수에 영향을 미치는 요인이 하나라고? 과연 이게 맞는거야?</p>
<p>결론부터 말하자면 응~ 아니야 😝</p>
<p>분명, Target 변수에 영향을 주는 요인들은 다양하다. 여러 개의 feature를 사용하여 관계를 알아볼 수 <strong>다중 회귀</strong> 가 있다.</p>
<p>그렇다면, 어떤 특징들을 새롭게 만들어서 다중 회귀 모델에 대입해볼 수 있을까?</p>
<p>똑똑하게도(?) 사이킷런에서는 변환기Transformer 라고 불리는 특성공학과 전처리하는 클래스가 존재한다.</p>
<pre><code class="language-python">from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures()
poly.fit([[2,3]])
print(poly.transform([[2,3]])

OUTPUT : [[1. 2. 3. 4. 6. 9]]
</code></pre>
<p>특징 값을 주게 되면, 특징값들을 제곱한 값, 특징값 간 곱하기 연산한 값을 새롭게 추가해준다. 1은 선형 회귀에서 절편(bias)와 곱해지는 계수 임을 의미한다.</p>
<h3 id="규제-기법">규제 기법</h3>
<p> <strong>규제</strong>는 머신러닝 모델이 Train 세트에 과도하게 학습하지 못하도록 방해하는 기술이라고 할 수 있다.</p>
<p>규제 기법을 사용하면 훈련 세트에 대한 점수는 낮아질 수 있지만 테스트 세트에 점수를 높일 수 있다. </p>
<p>규제 기법을 사용하기 앞서, 데이터 특징 값의 분포를 확인하고 스케일이 특징마다 차이가 크다면 <strong>정규화</strong>를 해주는 것이 주용하다. 계수 값이 크기가 서로 많이 다르면, 공정하게 제어 되지 않기 때문이다. </p>
<p>규제 기법에는 릿지(Ridge) 와 라쏘(Lasso) 방법이 있다.</p>
<p>Ridge : 계수를 제곱한 값을 기준으로 규제 적용</p>
<p>Lasso : 계수를 절댓값을 기준으로 규제 적용</p>
<h3 id="릿지-ridge-와-라쏘-lasso">릿지 Ridge 와 라쏘 Lasso</h3>
<p> 사이킷런에서는 linear_model 패키지안에서 Ridge와 Lasso를 제공하고 있다.</p>
<pre><code class="language-python">from sklearn.linear_model import Ridge

ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))</code></pre>
<pre><code class="language-python">from sklearn.linear_model import Lasso

lasso = Lasso()
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_traget)</code></pre>
<p>지금은 Ridge( )와 Lasso( ) 호출에, 어떠한 파라미터도 입력해주지 않았다.</p>
<p>Default로 적용되는 파라미터 외에 어떠한 파라미터도 쓰지 않았다는 의미이다. </p>
<p>그러나, 규제의 양을 임의로 조절할 수 있는데, alpha 라는 매개변수로 규제의 강도를 조절할 수 있다.</p>
<p>alpha 값이 크면 규제 강도가 세지므로 계수 값이 더 줄이고, 조금 더 과소적합을 유도할 수 있다.</p>
<p>alpha 값이 작으면 규제 강도가 약해지므로 계수 값을 조금만 줄이게 되고, 과대적합할 가능성이 높아진다. </p>
<h3 id="하이퍼-파라미터">하이퍼 파라미터</h3>
<p> <strong>하이퍼 파라미터 (Hyper-Parameter)</strong> 는 머신러닝 알고리즘에서 학습되지 않는 파라미터를 의미한다.</p>
<p> 위에서 회귀모델에서 규제를 적용하는 기법 Ridge와 Lasso를 살펴보았다. </p>
<p> 물론 어떠한 파라미터도 전달해주지 않으면, 기본 알고리즘으로 해당 모델을 사용해 볼 수 있다.</p>
<p> 그러나, alpha 라는 값을 사용하여, 기본 모델에서 변형을 가할 수 있다. </p>
<p> 그렇기 때문에, alpha 파라미터는 Ridge, Lasso 에서 규제 강도를 제어하는 하이퍼 파라미터이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 딥러닝의 개요]]></title>
            <link>https://velog.io/@b-jayu/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@b-jayu/DL-%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%98-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Mon, 04 Sep 2023 01:44:55 GMT</pubDate>
            <description><![CDATA[<p><strong>기계 학습은 크게 3가지 학습 방식으로 나누어 볼 수 있다.</strong></p>
<p>지도 학습은 주어진 답을 정확하게 맞추기 위해 진행되는 학습 방식을 의미한다.</p>
<p>비지도 학습은 정리를 통해서 어떤 데이터를 이해하게 되는 학습 방식이다. </p>
<p>강화학습은 숙련하는 것과 유사하다.</p>
<p><strong>기계 학습 중 지도 학습은 회귀와 분류로 나누어 볼 수 있다.</strong></p>
<p>회귀는 label이 숫자형(연속형) 변수인 경우, 정확한 값을 예측하기 위한 학습방법이고,</p>
<p>분류는 label이 범주형 변수인 경우, 데이터가 속하는 범주를 정확하게 맞추기 위한 학습방법이다.</p>
<p>DecisionTree, RandomForest, KNN, SVM, Neural Network 등과 같은 알고리즘을 이용해 회귀와 분류 예측을 진행할 수 있다.</p>
<p>AI를 구현하기 위한 세부 라이브러리는 TensorFlow, PyTorch 등이 있다.</p>
<p>TensorFlow와 PyTorch의 차이점이라고 한다면, 파이토치는 연구 종사자분들이 주로 사용하는 라이브러리라고 한다. 실무 현업에서는 텐서플로우를 사용하는 경우가 많지만, 현재에는 이 둘 간의 우열을 가릴 수는 없기 때문에, 결국에는 두 가지를 모두 사용할 줄 알아야한다는 점이다. </p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e09a6860-de81-4653-bfae-99a882645c4a/image.png" alt=""></p>
<p><strong>데이터 엔지니어, 데이터 분석가 그리고  AI개발자의 차이점은 무엇일까?</strong></p>
<p>만약 사용자가 하나의 웹 사이트를 이용한다면, 데이터 엔지니어는 사용자의 로그 데이터를 모아서 리포트를 만들어 서비스가 어떻게 활용되었는지, 데이터가 흘러가는 길을 만드는 일을 한다. 데이터 분석가는 데이터 파이프라인을 통해 처리되는 데이터들을 활용하여 분석 리포트를 기획 및 작성하는 업무를 담당할 수 있다.</p>
<p>AI 개발자는 머신러닝 엔지니어, 데이터 엔지니어 라고 많이 불리며 데이터 분석과 개발을 총괄하는 직무가 데이터 사이언티스트라고 할 수 있다. 데이터 사이언티스트는 미션을 해결하기 위해 없는 데이터를 수집하고, 처리, 프로세스 전반에 대한 이해가 필요한 직무이다.</p>
<p>빅 데이터 관련 엔진, 아키텍쳐를 학습하기 위해서는 관련 기술의 공식 문서를 참고하는 것이 유용하다. 아래에 학습에 도움이 될만한 사이트를 링크를 통해 확인할 수 있다. 최신 머신러닝 모델인 SOTA 모델에 대해서도 접하기 좋은 사이트 링크도 있다.</p>
<p><a href="https://spark.apache.org/">Apache Spark™ - Unified Engine for large-scale data analytics</a></p>
<p><a href="https://www.databricks.com/">Data Lakehouse Architecture and AI Company - Databricks</a></p>
<p><a href="https://docs.snowflake.com/ko/user-guide-getting-started">시작하기 | Snowflake Documentation</a></p>
<p><a href="https://paperswithcode.com/">Papers with Code - The latest in Machine Learning</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[chapter 02. 머신러닝 기반 추천시스템(3)]]></title>
            <link>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C3</link>
            <guid>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C3</guid>
            <pubDate>Wed, 12 Jul 2023 08:32:57 GMT</pubDate>
            <description><![CDATA[<p>해석가능한 알고리즘의 종류를 알아보고, 각 알고리즘의 차이점을 분석해보고자 한다.</p>
<h4 id="lime-알고리즘">LIME 알고리즘</h4>
<p>Lime 알고리즘은 작은 선형모델을 이용하여, 복잡한 모델의 판단을 대신 해석하는 <strong>대리 분석</strong> 알고리즘이다. </p>
<p>대리 분석이란 설명하고자 하는 원래의 모델이 지나치게 복잡해서 해석하기 어려운 경우, 해석 가능한 쉬운 모델을 사용하여 기존의 모델을 해석하는 기법을 의미한다.
한 예시로, SVM(Support Vector Machine)은 성능은 좋지만, 설명능력이 좋지 않다. 이 때, logistic regression 모델처럼 성능은 낮지만 설명능력이 좋은 모델을 사용하여 모델의 계수를 기반으로 하여 모델의 판단 매커니즘을 어림짐작할 수 있다,
이러한 경우, 전체 모델의 중요 변수를 파악한다는 점에서 <strong>Global 대리 분석</strong>이라고 할 수 있다. </p>
<p>엄밀히 말하면, SVM과 Logistic regression 간에는 학습방식의 차이가 분명 존재하지만, 많은 경우에서 유용한 해석을 제공해주고 있기 때문에 <strong>model-agnostic</strong>(모델에 관계없이 적용 가능한) 이라는 장점이 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/86e7e1eb-c270-45db-ab38-9136ea4205f8/image.png" alt="">
전체 모델의 중요 변수를 새로운 모델로 대체해서 파악하는 방법을 Global(전역적) 대리분석이라고 부른다.
반대로 개별 샘플에 대한 모델의 판단을 분석하는 방법을 Local(지역적) 대리분석이라고 한다.
지역적인 설명은 비즈니스 상황에서 더욱 중요한 경우가 많다. 예를 들어, 개인의 채무 불이행 여부를 예측하거나, 1년 내 뇌졸중의 발병 여부를 예측하는 모델을 판단을 설명하고자 할 때, 지역적 대리분석 기법을 적용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/cab28e08-70aa-466d-adee-7e87c6817813/image.png" alt="">
LIME은 Local Interpretable Model-agnostic Explanations 를 의미한다. 모델에 관계없이 지역적으로 설명가능한 알고리즘이라는 의미를 담고 있다.
예측을 내림에 있어 어떤 feature가 사용되었는지, 한 샘플에 내려진 판단이 어떻게 내려진 것인지를 분석해준다. 이 때, 사용된 모델과 무관하에 사용할 수 있는 알고리즘을 의미한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/d13b4255-1aaa-49dd-85aa-f8c409bedf7f/image.png" alt="">
Lime은 특정 sample point에 대하여, 결정경계 가운데에 지역적인 선형회귀모델을 적합해서 회귀식의 계수를 이용하여 모델의 판단 매커니즘을 분석하고자 하는 방식이다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c46aaab2-252d-41fb-a92b-24f96c7e2785/image.png" alt=""></p>
<ol>
<li>원래 (Blue) Label 이었던 sample의 라벨링을 변경하고, 데이터를 뒤섞어 새로운 samples을 생성한다. 이 과정은 데이터 뒤섞기(permutation)라고 한다.</li>
<li>뒤섞은 데이터와 기존 관측치 사이의 거리를 측정하여 향후 가중치로 활용한다. 가중치는 가까울수록 높은 가중치를 적용하게 된다.</li>
<li>black box 모델을 사용하여 새로운 데이터를 대상으로 예측을 수행</li>
<li>뒤 섞은 데이터로부터 복잡한 모델의 출력을 가장 잘 설명하는 m개의 feature를 선택한다. 특정 feature 값을 변경하였더니, score 또는 likelihood가 크게 변동되었다고 하면 해당 feature는 중요한 feature라고 간주할 수 있다.</li>
<li>뽑힌 m개의 feature로 단순한 모델을 적합시키고, 앞서 계산한 거리차이측정값을 가중치로 사용한다.</li>
<li>단순한 모델의 가중치는 곧 복잡한 모델의 local한 행동을 설명하는데 사용된다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/9c14d300-a93b-4b8c-92f3-3a95a4b3d102/image.png" alt=""></p>
<p>Lime 알고리즘의 손실함수에서 regularization term(정규화 텀)의 존재를 확인할 수 있다. 이는 너무 많은 feature를 이용하면, 아무리 단순한 모델일지라도 해석하기 어렵기 때문에, Lasso(L1규제)로 coefficient를 0으로 만드는 정규화 term을 가지게 된 것이다.</p>
<h4 id="shap-알고리즘">SHAP 알고리즘</h4>
<p>SHAP 알고리즘은 피처의 기여도를 기반으로 하여 전체 모델 또는 개별 대한 변수의 중요도를 설명해주는 알고리즘이다.
<img src="https://velog.velcdn.com/images/b-jayu/post/89aba66d-8123-4517-8f62-04438972f74d/image.png" alt=""></p>
<p>sharpley value는 게임이론에서 도입된 개념으로, 전체 결과에 대한 기여도에 따라 게임 내 각 플레이어에게 공을 공평하게 나눌 수 있도록 계산한 값을 의미한다. 이 개념을 차용하여 SHAP 알고리즘에서는 feature가 추가 될 때, feature가 존재하다가 존재하지 않았을 때 예측값이 얼마나 변화하는지, 가능한 모든 feature combination에 대한 평균을 구하는 방식이다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/970433b3-f1d9-4937-876e-032042e042a4/image.png" alt=""></p>
<h4 id="ebm-알고리즘">EBM 알고리즘</h4>
<p>EBM(Explainable Boosting Model)</p>
<p>복잡한 알고리즘일수록 성능은 높으나 해석이 어려워진다는 <strong>Performance - Explainability Trade-off</strong> 이 있다.
비즈니스적인 목적을 위해 설명 가능성이 필요할지라도, 앞서 배운 SHAP이나 LIME과 같은 대체적인 알고리즘에 의존할 수 밖에 없다.</p>
<p><a href="blob:https://velog.io/c893c4f3-a3ab-4308-929a-e11b39cd3efb">업로드중..</a></p>
<p>EBM 알고리즘은 MS에서 공개한 InterpretML에 탑재된 알고리즘의 하나로, Glassbox 모델이라는 특성을 가진다. 자기 자신을 쪼갠 함수를 더해서 모델의 예측값이 어떻게 나왔는지 직관적으로 설명할 수 있게 해준다.
더불어 Boosting과 Bagging과 같은 학습 기반의 기법을 통해 성능을 확보하고 있다. pairwise interaction을 모델링함으로써 설명가능성을 동시에 보장한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/8ca3f0e2-a055-42d6-a58d-34975b373b3c/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/406a598e-da98-4232-bda3-1bdc2d2b27a3/image.png" alt=""></p>
<p>EBM 학습 방식은, 처음에 하나의 피처에 대해서만 트리를 적합시킨다. 작은 learning rate로 학습하여 한 피처에 대해서 과적합되는 것을 방지한다. 이 결과로 발생된 residual을 다음 트리에 전달한다. 그리고 모든 피처에 대한 residual 계산이 이루어지고 마지막 모델에 전달되어, 마지막 feature 학습이 종료되면 iteration 1회가 수행완료된다.
반복수행을 n번 한 이후에, 각 feature 별로 생성된 트리를 모두 결합하여 하나의 plot으로 만들 수 있다. 이 경우, 예측은 생성된 plot을 기반으로 이루어지기 때문에, 기존의 tree는 필요하지 않게 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[chapter 02. 머신러닝 기반 추천시스템(2)]]></title>
            <link>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C2</link>
            <guid>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C2</guid>
            <pubDate>Tue, 11 Jul 2023 10:26:01 GMT</pubDate>
            <description><![CDATA[<p>모델 기반 추천시스템은 크게 3가지로 분류 할 수 있다. 
첫번째, 컨텐츠 기반 필터링에서 주로 사용하는 트리기반의 모델
두번째, 협업 필터링에서 사용하는 행렬 분해 방식의 모델
그리고 세번째, 하이브리드 방식으로 앞선 두 가지 방식을 합친 모델로 구분할 수 있다.</p>
<h4 id="트리-기반의-모델">트리 기반의 모델</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/adbcc22d-840b-48ae-a95d-39935b5f7a52/image.png" alt="">
컨텐츠 기반 필터링에서 트리기반의 모델이 주로 사용된다. (랭킹, 분류테스트 등에 많이 사용된다.)
해당 모델은 주어진 입력 피처에 대하여 일련의 결정 규칙을 생성하는 알고리즘이고, 단순한 구조를 띄고 있어 부족한 성능을 가지고 단일 모델로 과적합 가능성이 높지만 직관적이고 설명능력이 좋다는 장점도 지니고 있다. 
그렇다면 어떻게 더 효과적인 모델을 만들수 있을까? <del>ensemble</del></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/a8f7703a-84c5-4da0-a7e9-c189cb208d1c/image.png" alt="">
앙상블을 통해 다수의 모델을 구성해 에러를 줄이는 방식을 할 수 있다. 이때 어떻게 다양성을 확보하고, 개별 모델들을 취합할 것인지 고려하는 것이 중요하다.
<strong>여러 모델을 조합했을 때, 하나의 강력한 알고리즘 모델보다 더 뛰어난 성능을 발휘할 수 도 있고, 개별적인 알고리즘이 가진 장점을 더하고 단점을 보완할 수 있다</strong>는 점이 <strong>ensemble의 기본 idea</strong>라고 할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/b1a8c814-b4d9-4192-8ae7-182fee5112d7/image.png" alt="">
앙상블의 종류에는 배깅(bagging), 부스팅(boosting), 스태킹(stacking)이 있다.</p>
<ul>
<li>배깅(bagging) :<strong>B</strong>ootstrap <strong>Agg</strong>regat<strong>ing</strong>의 약자, 다르게 샘플링한 데이터로 각각 다른 모델을 학습한다. 전체 학습 데이터에서 랜덤복원추출하여 구성된 데이터셋마다 다른 모델을 학습시킨다. </li>
<li>부스팅(Boosting) : 모델을 순차적으로 학습시키며, 이전 모델의 약점을 해결하며 성능을 높인다. 앞선 모델 학습에서 error를 발생시킨 sample에 대해서 가중치를 적용하여 더 학습할 수 있도록 하는 방식이다.</li>
<li>스태킹(stacking) : 서로 다른 모델의 출력에서 최종 출력을 만드는 메타모델을 학습시키는 기법이다.</li>
</ul>
<p>먼저, Bagging 방식을 사용하는  Random Forest에 대해서 알아본다.
<img src="https://velog.velcdn.com/images/b-jayu/post/6e304e80-7f84-4af9-a381-1579a454021e/image.png" alt="">
랜덤 포레스트에서는 원본 데이터셋을 복원 추출하여 데이터의 다영성을 확보한다. 그리고 각 데이터셋에 대하여 개별 모델을 학습시키고 결과를 결합한다. 따라서 복원추출한 결과를 종합하는 모델이다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/dadf8c79-1023-4052-bc0c-0bd2272da893/image.png" alt="">
랜덤 포레스트에서의 핵심은 bagging 방식으로 데이터 셋을 추출할 때, 다양성을 확보하는 것이 중요하다. 또한 feature random selection을 통해 각기 다른 접근, 추론을  이끌어내는 logic을 학습할 수 있다는 점에 핵심이 있다.
다양한 모델을 종합하기 때문에, 특정 데이터에 오버피팅 되는 현상을 방지하고 분산을 줄이는 것이 배깅의 목표이다.</p>
<p>두번째, Boosting 방식이다.
<img src="https://velog.velcdn.com/images/b-jayu/post/7c9ac1c5-a0fe-4949-896c-6b691f6be86e/image.png" alt="">
처음에는, weak learner 모델을 사용하여 학습하고, 이전 모델 학습에서 잘 못 맞춘 문제에 집중하도로 유도할 수 있다. 전체 데이터셋에서 이전 모델이 맞추지 못한 데이터 샘플에 대해 가중치를 적용해서 더 학습할 수 있도록 유도하는 것이다. 따라서 이전 모델의 예측 성능에 따라 weighted sampling을 수행하게 된다.
이렇게 해서, 데이터 샘플에 대한 오차를 줄이는 데 boosting의 목표가 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/452e365a-2bdb-418a-abfe-72cd20e30ed3/image.png" alt="">
boosting을 사용하는 모델로, LightGBM을 예로 들 수 있다.XGBoost의 경우, 트리의 레벨 단위 마다 모든 분기가 학습될 때까지 수행하기 때문에 연산 속도측면에서 비효율적이다. 그러나 LightGBM은 손실함수가 더 크게 개선되는 포인트 leaf를 따라서 깊이를 더해가기 때문에 불필요한 포인트를 세분화해서 학습을 진행하지 않는다.</p>
<p>Tree기반의 모델에서는 어떤 feature를 통해 분기시켜야 하는가에 대한 고민을 하게 되는데, 이 때, feature histogram화 해서 최적의 분기점을 쉽게 찾는 것이 관건이다. 
feature마다 모든 경우의 수를 탐색하여 분기점을 정하는 것은 너무 비효율적이고 시간 소모가 많은 작업이다.</p>
<p>GOSS(Gradient-based One-Side Sampling) 방식을 적용할 수 있다. 이 방식은 학습에 도움이 되는 상위 A% 데이터를 모두 사용하고, 나머지 데이터는 랜덤추출하여 사용하기 때문에, 대규모 데이터셋의 학습에 적용할 수 있는 방식이다.</p>
<p>트리기반의 모델은 딥러닝 방법론과 비교할 수 있을만한 추천 성능을 보이며, 관련한 실무적 연구적 기반 사례가 많다. 또한 feature histogram 화 방식으로 자원 효율적인 학습이 가능하고, 행렬분해 기반 방법론에 비해 모델의 판단을 사람이 해석하기 용이하다. 따라서 XAI(설명가능 인공지능)에 손쉽게 적용할 수 있다.</p>
<h4 id="행렬-분해-알고리즘">행렬 분해 알고리즘</h4>
<p>추천시스템에서 상호작용 행렬이라는 것이 있다. 각 유저가 아이템에 대해 매긴 평점, 혹은 구매/클릭 여부를 나타낸 행렬이다. 이를 통해 유저의 직간접적 선호를 파악할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/dbc95105-5f2b-4b4e-a1de-d69de1e64258/image.png" alt="">
평점(상호작용)행렬이 있다고 할 때 두개의 작은 행렬로 쪼개어, 그들의 으로 유저의 평점을 예측하는 모델을 설계할 때, 상호작용 행렬에서 보다 더 적은 정보의 양을 가지고서도 결과행렬을 만들어 낼 수 있다.
두 개의 작은 행렬은 각각 유저 잠재 요인, 아이템 잠재 요인을 나타내게 된다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/56fa4e8d-6b36-4f76-b75a-879dca6f59aa/image.png" alt="">
Matrix Factorization 방식으로 표현하면, 원래 행렬의 정보를 저장하지 않더라도 효율적으로 정보를 가질 수 있고, 예측할 때도 필요한 정보만을 가지고 계산하기 때문에 효율적이라 할 수 있다. 
이 방식을 통해서는 잠재 패턴을 발견할 수 있는데, 이는 저차원행렬로 매핑하는 과정에서 데이터의 노이즈를 줄이고 압축하는 방향으로 행렬을 저장할 수 있게 된다. </p>
<p>행렬분해 알고리즘을 학습시키는 방법에는 SGD, ALS 등이 있다.
<img src="https://velog.velcdn.com/images/b-jayu/post/a84b6f64-0bf1-4373-b86d-c61f5d74751d/image.png" alt="">
SGD는 확률적 경사 하강법을 의미하며, 실제 유저 u의 아이템i에 대한 평점과 MF 행렬 latent factor 연산 값 사이에 차이를 이용하여 손실함수를 구성한다. 손실함수를 최소화 하는 방향으로 학습을 진행한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/a4b1a8fe-8660-438a-915c-d74496e4c707/image.png" alt="">
ALS 학습방식은 SGD와 동일하지만, 유저 행렬, 아이템 행렬이 있을 때 하나의 행렬을 고정시키고 다른 한 행렬만 최적화하는 방식을 취한다. </p>
<p>Matrix Factorization 모델은 <strong>Latent Factor라고 부르는 의미가 숨어있는 특성을 발견할 수 있어야 한다</strong>. 이것이 <strong>MF 알고리즘의 핵심</strong>적인 요소이며, SVD, NMF 등이 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/515a623d-571d-4519-aab1-b046c5177775/image.png" alt="">
SVD기반의 Matrix Factorizaion에서는  정방이 아닌 m*n 행렬을 u,v라는 직교행렬과 고유값행렬 Sigma로 분해하는 기법이다.
유저 기저벡터가 존재할 때, 유저 데이터를 유저 공간에 벡터로 매핑시키고, 여기서 고유값 행렬로 크기를 조정해준다. 다시 한 번, 아이템 공간에 해당 벡터를 매핑시킬 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/0ed07e94-cc15-4683-8d46-a91f09187889/image.png" alt=""></p>
<p>SVD 행렬 분해로 생성된 M개의 singular value 중에서, 가장 중요한 k개의 singluar value만 남김으로써  truncate함.
이 truncate된 행렬로 복원한 기존 행렬의 근사행렬의 원소에는 유저가 평가하지 않은 아이템에 대한 평점의 근사치가 들어가 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/a2758bd1-b760-4685-84e7-9096f0bc6ad7/image.png" alt="">
SVD 각 부분은 다음과 같이 해석할 수 있다. 
U는 유저의 latent factor, V는 아이템의 latent factor, Sigma는 latent factor의 중요도를 나타내고 있다. Latent Factor는 유저와 아이템의 공통된 특징으로 인간이 해석하기 어려운 형태이기 때문에 latent(잠재적) 이라고 한다.</p>
<h4 id="factorization-machine">Factorization Machine</h4>
<p>Factorization Machine 은 컨텐츠X협업 필터링 기반의 추천시스템에서 활용할 수 있는 모델이다. 
앞서, Matrix Factorization 방식이나 Tree기반의 모델에는 한계가 존재하였다.</p>
<p><strong>MF 모델</strong>의 경우, Interaction Matrix의 입력을 받기 때문에, cold-user이거나 matrix 자체가 sparse하면 잘 작동하지 않는 문제점이 있었다.
<strong>Tree기반의 모델</strong>에서는, Interaction Matrix를 직접적으로 활용할 수 없고, (user, item) pair에 대해서 &quot;잘 맞다 혹은 아니다&quot;를 판단하기 때문에, matrix에서 포착할 수 있는 정보활용에 한계가 있었다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c009574c-b4bd-48c3-865c-624b156b0212/image.png" alt="">
Factorization Machine을 살펴보면, 사용자-아이템 간의 인터랙션도 사용하고 feature들도 활용하고 있음을 확인할 수 있다.
각 feature들이 최종 예측 값에 미치는 영향을 보는 선형결합 term이 있으며, feature 인터랙션 파트를 의미하는 term을 포함하고 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/7caa2345-b8ce-484e-80b5-c6bf10b5259c/image.png" alt="">
FM 알고리즘에서 더 나아가, FFM(Field-aware Factorizaton Machine) 알고리즘도 있다. 이는 광고추천 등에 자주 활용되는데, feature마다 하나의 latent vector를 갖는 것이 아니라, feature 내 field 마다 latent vector를 할당하여 더욱 복잡한 feature interaction을 학습할 수 있도록 구성한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/0081cacf-5a62-446d-9921-171232b5db90/image.png" alt=""></p>
<h4 id="추천시스템의-평가-방법---정확도-지표">추천시스템의 평가 방법 - 정확도 지표</h4>
<p>추천시스템에서는 맞췄는지 여부 뿐만 아니라, 얼마나 잘 맞추었는지 상대적 순서가 중요하다. 가령 같은 결과가 나왔다하더라도, 10번째로 나왔는지 1번째로 나왔는지는 추천의 성능이 다르다고 할 수 있다. 그러므로 기존 metric(precision, recall, accuracy)를 그대로 쓸 수 없다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/05e985ea-c94d-4a8e-9016-b1c50622847e/image.png" alt="">
MRR(Mean Reciprocal Rank)</p>
<ul>
<li>binary relevance based metric으로 이진적으로 좋은 추천인지 나쁜 추천인지를 가려내는 지표이다.</li>
<li>유관 상품이 최초로 등장한 곳은 몇번째 인지 측정하는 지표</li>
<li>계산과 해석이 단순하고, 고객이 잘 알고 있는 아이템을 찾고자하는 시스템에서 MRR을 통한 성능 개선을 꾀할 수 있다.</li>
<li>그러나 유관 상품이 1개이던 여러 개이던, 동일하게 그 여부만 판단하므로 유관상품의 목록을 원하는 경우에는 좋은 척도가 될 수 없다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/6b67bb3a-1c70-4c21-88f7-aa91ff392ea2/image.png" alt="">
MAP(Mean Average Precision)</p>
<ul>
<li>리스트 내에서 유관상품이 등장할 때마다, precision을 구하고, 이를 내는 방식</li>
<li>결과로 생성된 여러 리스트간의 평균을 내서(Mean AP)를 평가하는 방식이다.</li>
<li>랭킹이 높은 아이템에 대해서 더 높은 가중치를 부여하기 때문에, 대부분의 추천 시스템에 타당한 처리 방식으로 여겨진다.</li>
<li>그러나 평점의 scale이 rating 방식인 경우, 적합하지 않은 방식이다.</li>
</ul>
<p>NDCG(Normalized Discounted Cumulative Gain)
<img src="https://velog.velcdn.com/images/b-jayu/post/40682179-ad0c-42de-a4b5-477cccb05b43/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/73b7e009-93ff-444a-9dd4-e2834a9b1f5b/image.png" alt=""></p>
<ul>
<li>NDCG는 MAP 방식과 비교해서, 순위 매겨진 품목들의 위치를 평가하는 데 우수하다고 할 수 있다. </li>
<li>그러나 cold-user로 인해 IDCG가 0인 경우(상품에 대한 유관도를 매핑할 수 없는 경우)를 직접 따로 다루어 주어야 한다.</li>
</ul>
<h4 id="추천시스템의-평가-방법---기타-평가-지표">추천시스템의 평가 방법 - 기타 평가 지표</h4>
<ol>
<li>Hit rate(Hit@k) : k개의 추천 결과 중에 마음에 드는 결과가 존재하였는가?</li>
<li>Diversity : 새로운 아이템을 추천하여 다양성을 확보하였는가?
 다양성의 중요도는 서비스의 특성에 따라 달라질 수 있다. </li>
<li>Novelity : 참신성, 얼마나 잘 알려지지 않은 새로운 정보를 제공하였는가?</li>
<li>Serendipity : 의도적으로 찾지 않았음에도 뭔가 새로운 좋은 것을 발견하는가?</li>
</ol>
<h4 id="설명가능한-ai-xai">설명가능한 AI, XAI</h4>
<p>추천 시스템은 서비스 도메인에 따라 추천 대상이 되는 아이템 특성이 달라지고, 이에 잘 적용되는 알고리즘과 시스템 구조를 적절히 고안되어야 한다.
또한, 다양한 비즈니스 목표가 존재할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/f388b048-9d77-4275-813f-062d9c38f7b0/image.png" alt="">
설명가능 인공지능(XAI)는 머신 러닝 모델이 어떻게 의사 결정을 내리는지 인간이 이해할 수 있도록 설명하는 알고리즘이다.
복잡한 인공지능 판단과정을 사람이 이해하기 쉽도록 하고 몯레의 신뢰성과 투명성을 확보하는 것이다.</p>
<p>그림에서, Glassbox 모델은 판단과정이 투명하여 어떤 변수가 중요한지 알수 있고, 추천받은 이유를 사용자에게 제공할 수 있다.
그러나, Blackbox 모델에서는 계산과정이 복잡하여 해석하기 어렵고, 판단로직을 파악하기 어렵지만, 성능도 좋고 패턴을 인식하는 능력이 좋기 때문에 실무적으로 많이 사용하는 모델이다.</p>
<p><strong>그럼에도 불구하고 XAI는 왜 필요한 것일까?</strong></p>
<ol>
<li>XAI는 모델을 학습하는 과정에서 발생하는 문제점을 해결할 수 있는 디버깅에 insight를 제공해줄 수 있기 때문이다. 
 추천 모델이 어떤  feature를 중요하게 생각하는지, 어떤 잘못된 가정이 포함되어 있는지 파악할 수 있게 해준다. 또한, 정답 데이터가 학습 데이터에 섞여 있는지(data leakage)를 파악할 수 있게 해준다.</li>
<li>XAI는 사용자의 신뢰성을 얻을 수 있다.
 비즈니스 커뮤니케이션을 하거나, 사용자에게 AI 모델의 추론 근거를 제시함으로써 신뢰성과 서비스 만족을 제공할 수 있다.</li>
<li>모델의 편향성을 분석할 수 있다.
 추천모델의 판단 근거에 편항되거나 민감한 정보가 포함되어 있으면, 추천모델의 공정성 문제가 제기될 수 있다. 모델의 판단을 분석해서, 추천 편향이 있는지 판단해주는 방법론을 XAI가 제시해준다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[chapter 02. 머신러닝 기반 추천시스템(1)]]></title>
            <link>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C1</link>
            <guid>https://velog.io/@b-jayu/chapter-02.-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C1</guid>
            <pubDate>Mon, 10 Jul 2023 10:23:45 GMT</pubDate>
            <description><![CDATA[<h4 id="들어가며">들어가며</h4>
<p>이전까지 컨텐츠기반 필터링과, 협업 필터링에 대해 살펴보았다.
컨텐츠기반 필터링은 유사 상품의 특징을 추출하여 추천을 제시하는 것이고, 협업 필터링은 비슷한 유저들의 선호에 따라, 해당 유저도 이를 선호할 것이라고 예측, 추천하는 방식을 의미한다. </p>
<p>추천 방식에는 메모리 기반 추천방식, 모델 기반 추천 방식 크게 2가지로 분류할 수 있다. 
메모리 기반 추천은 이웃 기반 추천 시스템이라고도 하며, 협업필터링, 컨텐츠기반 필터링이 대표적이다. 이러한 방식들은 구현이 간단하고 직관적이지만, interaction 행렬에서 직접 연산을 수행하기 때문에 스케일이 큰 시스템에서는 적절하지 않다. 그리고 단순 유사도를 계산하는 방식이기 때문에 주변 정보를 반영하지 못하는 단점도 있다.</p>
<p>반대로 모델 기반의 추천은 머신러닝모델 기반의 추천이라고 하며, 다량의 데이터로 학습한 모델을 통해 리소스를 효율적으로 추천할 수 있다. 
정해진 패턴의 피처를 학습하여 대용량 데이터를 효율적으로 처리할 수 있다. 또한  interaction 외에 유저, 아이템의 피처정보를 유연하게 활용하여 복잡한 패턴을 포착할 수 있고, 높은 성능을 얻을 수 있다.</p>
<h4 id="데이터-기반-모델-학습의-직관">데이터 기반 모델 학습의 직관</h4>
<blockquote>
<p>사람의 일(판단)을 기계에게 시켜보자</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c954f81e-1ffc-42b0-b2ac-f2bf483b6659/image.png" alt="">
&quot;누런 색 바탕에, 검은색 점이 3개 있는 이미지를 치와와라고 분류 하자&quot; 라고 했을 때, 단순한 규칙을 설정하게 되면 정확하게 구별되지 않는 문제점이 발생한다.</p>
<p>&quot;강아지 처럼 생긴 동물에 줄무늬가 있으면, 호랑이라고 인식하자&quot;라고 있을 때 쇠창살 그림자가 드리워진 강아지를 호랑이라고 인식하는 오분류 사례가 발생한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/3a16579a-a9ab-449a-823e-fd134c852fbf/image.png" alt="">
전통적인 프로그래밍은 사람이 프로그램 설계 및 규칙 작성을 수작업으로 하였지만, 머신러닝은 입력과 출력을 정해놓고, 모델이 입력과 출력 사이의 관계에 대한 가설을 담고 있으며 이를 스스로 패턴학습을 통해 추론한다. 따라서 패턴학습과 모델을 알아서 완성할 수 있다.</p>
<p><strong>모델</strong>은 데이터 사이의 관계를 학습할 수 있도록, 입출력 데이터 사이의 관계를 설명하는 일종의 가설의 수학적 표현이다.
<strong>학습</strong>은 데이터와 그 해답으로부터 규칙을 얻어내는 과정이다. </p>
<p><strong>손실함수</strong>는 패널티를 어떻게 주고, 어떻게 규칙을 수정할 것인가를 담고 있다.
모델이 학습을 자동으로 일어나게 할 수 있는 요인이 손실함수이다. 
손실함수는 모델의 수치값과 실제 값의 차이를 계산하는 함수를 의미하고, 대표적인 손실함수로 RMSE(Root Mean Square Error)가 있다</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c61f7e03-ef45-46c0-af1a-a8a41841f5d8/image.png" alt="">
모델은 손실함수 값을 최소화하는 방향으로 학습을 계속해서 진행해나가며, Gradient Descent 방식을 이용하여 손실함수를 최소화할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/f696acd2-03b7-4dca-a431-a53ed4a881d3/image.png" alt="">
요약하면, 모델은 데이터 입력과 출력 사이의 가설을 세우는 과정
학습은 모델을 통해 비어있는 가설의 파라미터를 패턴으로 채우는 과정이다
손실함수는 실제 값과 예측 값 사이의 손실 계산으로 통해 자동으로 학습이 이루어지도록 한다. 마지막으로 평가를 통해 새로운 데이터에 대한 예측을 평가한다.</p>
<p>머신러닝 모델로 수행할 수 있는 Task는 크게 2가지로 나뉜다. 
<strong>회귀</strong>(Regression)은 연속형 변수 값을 뱉어내는 task
<strong>분류</strong>(classification)은 범주형 변수를 뱉어내는 task로 대부분의 추천 모델을 분류 task를 해결하는 데 집중되어 있다.</p>
<p>모델을 활용하기 위해서는 데이터를 전처리 하고, EDA를 통해 데이터의 입출력 형태를 분석하고 형태에 적합한 모델을 사용한다. 
단순한 선형 모델부터 복잡한 부스팅, 딥러닝 기반 모델까지 다양한 모델이 존재할 수 있다. 모든 문제에 장점을 보이는 killer 모델을 존재하지 않는다. 그러나 대부분 문제에 강점은 보이는 모델을 존재하며, 성능 좋은 모델을 ensemble하여 사용할 수도 있다.
학습을 통해 나온 수치 값과 실제 값 사이 손실을 계산하여 얼마나 패널티를 줄지 결정한다. 이를 토대도 더 나은 모델로 학습되도록 유도하는 기능을 수행한다.</p>
<p>학습을 통해 개선된 모델에 새로운 입력 데이터를 추가하여 적절한 예측을 뱉어내는지 확인한다. 이러한 능력을 &quot;일반화 성능&quot;이라고 한다.</p>
<h4 id="선형-회귀">선형 회귀</h4>
<p>선형 회귀는 입력 변수와 출력 변수 사이의 선형 관계를 모델링하는 알고리즘이다. 파라미터를 조정하면서 개별 데이터와 모델 사이의 손실이 최소가 되는 함수를 찾는다. 이는 데이터를 가장 잘 설명하는 파라미터를 찾는 것을 목표로 한다.</p>
<p>모델에는 무결하고 완전한 관계를 갖는 물리적 공식이나 직접 설계한 함수 등은 <strong>결정적 모형</strong>이라 하고, 입력과 출력의 경향성을 나타내며 오차항을 포함하는 모형은 <strong>통계적 모형</strong>이라고 한다.</p>
<h4 id="decision-tree">Decision Tree</h4>
<p>데이터를 규칙으로 구획할 수 있다. 새로운 데이터가 들어왔을 때, 정해진 규칙에 따라 각각의 구획으로 들어가게 되고, 최빈/평균값을 예측 결과로 반환한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/bcfec414-348e-45f8-ba47-bc6f209a8db1/image.png" alt=""></p>
<p>가장 좋은 규칙은 데이터들의 불순도를 측정했을 때, 불순도가 낮은 규칙을 좋은 규칙이라 할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/aef0312b-dd14-4827-9419-a823869ffba7/image.png" alt="">
그러나 불순도를 0으로 유도하기 위해, 지나치게 세밀한 분류를 진행하는 것은 데이터 overfitting을 야기할 수 있다. 따라서 pruning 하여 트리의 과도한 성장을 방지하여 일반화 성능을 높일 수도 있다.</p>
<h4 id="손실함수-최적화">손실함수 최적화</h4>
<p>대표적인 손실함수로 RMSE와 Cross Entropy가 있다.
<img src="https://velog.velcdn.com/images/b-jayu/post/de22822c-3198-4825-9a54-68e80a72c8ff/image.png" alt="">
cross entropy는 실제 정답 레이블의 분포를 나타내기 위해 필요한 정보량 이외에 추가 entropy를 더한 entropy를 의미한다.</p>
<p>특정확률분포에서 발생하는 사건들을 사건발생확률에 맞게 encoding할 대 필요한 평균적인 정보량을 의미하기도 하며, 불확실성이 높은 드문 사건에 대해서는 많은 정보가 필요하다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/1240e16e-3963-4390-beac-e7696f20fde5/image.png" alt="">
손실함수를 최적화 하기 위해서는, 각 파라미터에 대한 편미분을 수행하여 기울기가 수렴하는 단계에 이르기까지 파라미터를 수정하여 모델학습을 진행한다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/486bce7a-b423-47c6-86df-102a881a3b59/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/f50422b6-1f90-44ad-a1f6-8b65548bc4d9/image.png" alt="">
손실함수 최적화를 할 때에, 학습률이 중요하다. 만약 학습률이 너무 크다면 발산할 가능성이 커, minimum에 도달하지 못하는 문제가 발생한다.
또한 학습률이 너무 작다면, 수렴하는 데 오랜시간이 걸리고 Global minimum이 아니라 local minimum에 빠지는 문제점이 발생할 수 있다.</p>
<h4 id="학습-평가-지표">학습 평가 지표</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/66709c01-5cfe-4335-97e6-a39de38ded3e/image.png" alt="">
단순하게 입출력 관계를 가정하면 찾아야 할 패턴을 충분하게 학습하지 못하게 된다. 반면, 모델의 일반화 성능을 희생하게 되면 개별 noise를 학습하게 되므로 train 성능은 높아지지만, test 성능은 저하될 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e2525510-7ad1-4232-a696-8f921d97dbe6/image.png" alt="">
Bias와 variance 사이에는 trade-off 관계가 존재한다. bias를 줄이기 위해 복잡한 모델을 사용하면 variance가 증가하게 되고, variance를 낮추기 위해 simple한 모형을 사용하면 bias가 증가하게 된다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/2543d38c-55a6-45f3-b2b9-75c83cc97906/image.png" alt="">
학습 데이터에 대해 세세하게 맞추려고 하면, 과적합되는 문제점이 발생할 수 있다. 이를 위해 최적화 과정에 제약을 추가하는 정규화 과정이 존재한다. </p>
<p>Lasso 규제는 특정 파라미터에 대한 weight가 0으로 남게 된다. 따라서 중요하지 않은 변수를 걸러내는데 Lasso 회귀를 사용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/2899a271-dfbe-4792-a439-218adf1d0ac2/image.png" alt="">
검증은 일반화 성능을 높이기 위해서 많고 다양한 untrained-data로 검증해야 한다. 그러나 데이터의 수는 제한적일 수 밖에 없기 때문에, hold-out, k-fold CV. LOOCV 방식을 활용하여 일반화 성능을 높일 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/3bd3cb02-e02e-4d22-96b4-73ea5813b39c/image.png" alt="">
Confusion Matrix 를 통해 확인할 수 있는 대표적인 평가지표로 Accuracy가 존재 한다. 다만, accuracy는 레이블 inbalancing 문제가 있을 때, error를 잘 잡아내지 못하는 단점이 존재한다. 따라서, accuracy 외에 precision, recall, f1-score 등을 활용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/f16f28ed-f6ae-4333-adab-749958cd8a7b/image.png" alt="">
또 다른 평가지표로 AUC 라는 것이 존재하는데, 이는 무작위로 찍은 것보다 얼마나 잘했는지 평가하는 지표이다.</p>
<p>AUC는 ROC curve의 하단부 넓이 비율을 나타내는 값으로, 값이 높을수록 좋다.
ROC는 이진 분류 모델에서 threshol에 따라 값이 변화하느 ㄴ성능 값을 나타내는 곡선이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 전화번호 목록(Python)]]></title>
            <link>https://velog.io/@b-jayu/Programmers-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9DPython</link>
            <guid>https://velog.io/@b-jayu/Programmers-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9DPython</guid>
            <pubDate>Fri, 07 Jul 2023 02:34:09 GMT</pubDate>
            <description><![CDATA[<p>프로그래머스 Level.2 에 해당하는 전화번호 목록 문제에 대한 풀이입니다.
자세한 문제 내용은 아래 링크에서 확인하실 수 있습니다.
<a href="https://school.programmers.co.kr/learn/courses/30/lessons/42577">https://school.programmers.co.kr/learn/courses/30/lessons/42577</a></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/294c4c6e-858a-4797-8a12-0c1df042ce29/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/2be6acca-3079-4891-b20d-45e6855c60f7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/65daba7c-a2a0-4118-9643-f933a5e715d7/image.png" alt=""></p>
<p>이중 포문을 활용한 풀이 방식</p>
<pre><code class="language-python">def solution(phone_book):
    answer = True
    phone_book.sort(key=len)

    for i in range(len(phone_book)):
        n = len(phone_book[i])
        for j in range(len(phone_book)):
            if i == j:
                continue
            if phone_book[j][:n] == phone_book[i]:
                return False
    return answer</code></pre>
<p>이중 포문을 사용함에 따라 시간복잡도가 증가할 것이라는 예상을 하였지만, 역시나 테스트 케이스 정확성은 높으나, 시간효율 측면에서 시간초과가 발생하였다.</p>
<p>문자열을 sort() 하게 되면, 문자열의 알파벳 순서 혹은 숫자 순으로 오름차순 정렬된다. 이에 따라 한 번호가 다른 번호의 접두사인 경우라면, 이웃하게 된다.
정렬에 따라 이웃한 두 문자열이 있다고 할 때, 앞에 있는 문자열이 뒷 문자열의 접두어가 되기 위해서는 앞 문자열의 길이가 더 짧아야 가능하다.
이를 고려한 코드를 아래에서 제시할 수 있다. </p>
<pre><code class="language-python">def solution(phone_book):
    answer = True
    phone_book.sort()

    for i in range(len(phone_book)-1):
        if len(phone_book[i]) &lt; len(phone_book[i+1]):
            if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
                return False
    return answer</code></pre>
<p>python에서는 접두어를 판별하는  str 내장함수 startswith()가 존재한다.
startswith() 를 활용하면 쉽게 접두어 판별여부를 확인할 수 있다.</p>
<pre><code class="language-python">def solution(phone_book):
    answer = True
    phone_book.sort()

    for i in range(len(phone_book)-1):
        if phone_book[i+1].startswith(phone_book[i]):
            return False
    return answer</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[추천시스템을 위한 기본 수학]]></title>
            <link>https://velog.io/@b-jayu/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EB%B3%B8-%EC%88%98%ED%95%99</link>
            <guid>https://velog.io/@b-jayu/%EC%B6%94%EC%B2%9C%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EB%B3%B8-%EC%88%98%ED%95%99</guid>
            <pubDate>Wed, 05 Jul 2023 13:00:27 GMT</pubDate>
            <description><![CDATA[<h4 id="고유값과-고유-벡터">고유값과 고유 벡터</h4>
<p>고유값과 고유벡터는 정방행렬에 대해서만 정의 될 수 있다.
<img src="https://velog.velcdn.com/images/b-jayu/post/3dcd27ba-6816-4ffe-abbf-86c180bba2d4/image.png" alt="">
A에 대해 Av = λv를 만족하는 0이 아닌 열벡터 v를 고유벡터, 상수 λ를 고유값이라 정의한다. λ는 &#39;행렬 A의 고유값&#39;, v는 &#39;행렬 A의 λ에 대한 고유벡터&#39;이다.</p>
<p>고유값과 고유벡터가 가지는 기하학적 의미는 무엇일까?</p>
<p>행렬 A의 고유벡터는 방향은 보존되고, 스케일만 변화되는 방향 벡터를 나타내고, 고유값은 그 고유벡터의 변화되는 스케일 정도를 의미한다.</p>
<h4 id="랭크rank">랭크(rank)</h4>
<p>행렬의 랭크란?
행렬에서 선형적으로 독립적인 열 벡터의 최대 개수를 의미한다.
기하적으로, 단위벡터에 대한 선형변환이 가해졌을 때, 공간 차원의 수를 의미하기도 한다.
<del>(base vector 기저 벡터의 개수를 의미하는 것이 아닐까?)</del></p>
<h4 id="특이값-분해-svdsingular-value-decomposition">특이값 분해 SVD(Singular Value Decomposition)</h4>
<p>특이값 분해는 임이의 m X n 차원의 행렬 A에 대하여 아래와 같이 행렬을 분해할 수 있다는 행렬 분해 방법를 의미한다.
<img src="https://velog.velcdn.com/images/b-jayu/post/b94b7430-3650-40fe-9c34-bac020a63a14/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c25751f0-d644-493c-9f83-f1984761fafa/image.png" alt=""></p>
<p>여기서, U와 V는 직교 행렬이고, 시그마는 특이값이 포함된 대각행렬을 의미한다. SVD는 추천시스템에서 데이터의 차원을 줄이고, 노이즈를 제거하는 데도 사용되며, Latent Factor(잠재 변수, 요인)을 발견하는 데 사용 할수 있다. </p>
<h4 id="latent-factor">Latent Factor</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/4a84ab7b-cdfc-4cd6-88f1-398b4d476ee0/image.png" alt=""></p>
<p>추천 시스템에서, Latent Factor model을 이용하여 사용자와 아이템을 잠재적인 차원들을 이용해 나타낼 수 있다는 관점에서 비롯된 모델이다.</p>
<p>위의 그림처럼, x축을 남성향과 여성향의 정도로 표현하고 y축을 웃기고 심각함의 정도로 표현할 수 있다면, 사용자와 아이템은 x,y축 값에 따라 매핑될 수 있음을 의미한다.</p>
<p>사용자와 아이템을 위 그림에서는 두 가지 차원으로 표현하였지만, 실제로는 사용자와 아이템을 모르는 차원에 표현하는 것을 의미하며, 차원이 무엇을 의미하는지 모르며, 개체를 표현하기 위한 차원은 여러 개 일 수 있다.</p>
<p>만약 latent factor model에서 사용자 mapping 지점과 아이템 mapping 지점이 가까울수록 유사하다고 판단할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Chapter 1. 고전적 추천 알고리즘]]></title>
            <link>https://velog.io/@b-jayu/Chapter-1.-%EA%B3%A0%EC%A0%84%EC%A0%81-%EC%B6%94%EC%B2%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@b-jayu/Chapter-1.-%EA%B3%A0%EC%A0%84%EC%A0%81-%EC%B6%94%EC%B2%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Mon, 03 Jul 2023 14:37:17 GMT</pubDate>
            <description><![CDATA[<p>추천 시스템을 기획하고 구현하기에 앞서, 추천 시스템이 무엇인지 이해하고 이를 위해 기존에 사용하던 고전적 추천 알고리즘을 학습해본다. 대표적인2가지 필터링 방식을 이해해보도록 하자.</p>
<h4 id="추천-시스템이란">추천 시스템이란?</h4>
<blockquote>
<p>추천 시스템의 개념과 기능을 이해하고, 추천시스템에서 중요한 요소, 데이터들 추천시스템에 활용하는 방법을 알아본다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e0368a9d-29d5-4bc1-a5e5-1ee891bbc0d7/image.png" alt=""></p>
<ul>
<li>추천 시스템은 <strong>사용자</strong>와 <strong>아이템</strong>의 주변 정보와 <strong>상호작용 기록</strong>을 바탕으로 사용자가 선호할 아이템을 예측하고 사용자의 의사결정을 돕는 인공지능 서비스이다.</li>
<li>여기서 사용자, 아이템, 상호작용 3가지 컴포넌트가 추천시스템에서 중요한 역할을 한다<ul>
<li>사용자는 서비스를 이용하는 주체</li>
<li>아이템은 서비스에서 판매 및 제공되는 대상 물품</li>
<li>상호작용은 서비스 내에서 사용자가 남기는 일련의 행동 기록을 의미</li>
</ul>
</li>
</ul>
<p>추천 시스템의 필요성</p>
<ul>
<li>오늘날에는 기술 발전과 인터넷의 보급으로 개인에게 노출되는 정보의 양이 소화할 수 있는 범위를 넘어서게 되었다. </li>
<li>정보 유입의 채널이 다양화되고 이러한 증상이 심화되었는데, 과도하게 많은 정보에 압도당해, 판단을 내리기 어려운 현상을 <strong>information overload</strong> 라고 한다.</li>
<li>사용자가 뒤쳐지는 것에 대한 두려움을 느끼지 않고, 의사결정을 도울 수 있도록 도와주는 역할을 하는 것이 추천시스템이다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/1c7c9d2d-5dba-469f-9dbd-3ef97bb7be29/image.png" alt="">
 추천 시스템은 Filtering 추천을 제공하여, 특정 유저에게 가장 연관있는 정보를 제안한다. 유관한 정보 필터링을 위해, 예측 시 머신러닝 알고리즘을 사용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/b2a375ef-56c5-4ced-ab81-59d20e58f33d/image.png" alt="">
 앞서 추천시스템의 가장 중요한 3요소는 유저, 아이템, 상호작용 이라 하였다. 그러나 때로는 맥략정보를 통해 유저에게 더 관련성이 높은 정보를 제공할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/a995bf9e-55ac-4638-9de8-4978b6b06efa/image.png" alt="">
 검색 시스템과 추천 시스템은 서로 유사한 것 같지만, 추천시스템의 큰 특징은 사용자의 별도 입력을 필요로 하지 않고 정보를 전달해주는 일방적인 방식을 취하고 있으며, 사용자 입력이 필요없다는 점에서 찾고 싶어하는 정보를 암묵적으로 제공한다고 볼 수 있다.</p>
<h4 id="비즈니스-적용-사례">비즈니스 적용 사례</h4>
<blockquote>
<p>비즈니스의 의미 파악하여 왜 추천시스템을 적용해야하는가? 추천시스템이 비즈니스에 가져다 주는 효과를 이해해본다.</p>
</blockquote>
<ol>
<li><p>E-Commerce</p>
<ul>
<li>사용자의 기록을 기반으로 다음 구매할 상품을 추천해준다</li>
<li>사용자의 이탈이 쉽고 빈번한 e-commerce에서 적절한 추천을 통해 매출 신장 뿐만 아니라 플랫폼에 소비자를 lock-in 시켜 오래 머무르도록 유도한다. </li>
<li>비슷한 패턴을 보이는 다른 사용자가 구매한 상품을 추천해준다(협업필터링)</li>
<li>함께 본 상품을 대체재, 함께 산 상품을 보완재로 분류하기도 한다.</li>
</ul>
</li>
<li><p>컨텐츠 추천</p>
<ul>
<li>넷*릭스에 따르면, 사용자 컨텐츠 시청의 약 75%는 사용자 선택이 아닌 추천 알고리즘에 의해 발생한 컨텐츠의 시청으로 밝혀짐</li>
<li>추천 알고리즘은 플랫폼의 확장과 유저의 lock-in에 중요한 요인으로 작용하고 있다.</li>
<li>추천하는 컨텐츠의 종류에 따라 시계열정보 및 시간적인 특성을 고려해야하는 경우도 존재함. 이 때 활용하는 데이터와 추천 접근법이 달라질 수 있다.</li>
<li>뉴스 추천의 경우, 아무리 유사 관련성이 높다하더라도 최신의 뉴스를 신속하게 전달하지 못한다면 좋은 추천시스템이라 할 수 없다.</li>
<li>텍스트를 추천하는 시스템의 경우, 자연어 처리의 어려움으로 인해 다른 추천 시스템 대비 기술적 어려움이 많을 수 있다.</li>
<li>POI(Point Of Interest) 
<img src="https://velog.velcdn.com/images/b-jayu/post/fb8d94c0-afe4-4a79-a6c5-e8c017010b48/image.png" alt="">
  다른 사용자의 interaction 정보를 활용하여, 사용자가 다음에 방문할 만한 장소를 추천한다.
  이 때, 위치적 요소와 시간적 요소를 고려해야한다.</li>
</ul>
</li>
</ol>
<h4 id="추천-시스템의-어려움들">추천 시스템의 어려움들</h4>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/90419ab7-333a-426d-a4fa-f1e7aaa29c4a/image.png" alt=""></p>
<ol>
<li>확장 가능성</li>
</ol>
<ul>
<li>추천 시스템은 기존 시스템에서 분리되어 독립적으로 운영될 수 없고, 기존 서비스의 한 파이프라인으로 적용될 수 있다. 따라서 서비스특성, 자원의 제약으로부터 자유로울 수 없다는 의미이다.</li>
<li>사용자, 아이템 수가 증가함에 따라 확장성의 큰 제약이 발생하게 된다.</li>
</ul>
<ol start="2">
<li>도메인 종속성</li>
</ol>
<ul>
<li>서비스 도메인에 따라 추천 대상이 되는 아이템의 특성이 달라 수 있다.
  데이터 타입, 아이템과 유저관계 등이 달라질 수 있다</li>
<li>이를 위해, 추천 아이템의 특징과 도메인 특성에 따라 적용되는 알고리즘과 시스템 구조가 적절히 고안되어야 한다.</li>
</ul>
<ol start="3">
<li>비즈니스 목표의 다양성</li>
</ol>
<ul>
<li>비즈니스 종속성이 큰 추천 시스템의 특성 상, 다양한 비즈니스 목표가 존재할 수 있다.</li>
<li>CTR(Clock-Through Rate) : 클릭률</li>
<li>CVR(ConVersion Rate) : 전환률(사용자가 광고이후에 행동으로 전환했는가?)</li>
<li>Diversity : 정보의 다양성
클릭율과 전환율 또는 클릭률과 다양성 사이에 충돌이 발생할 수 있다.</li>
</ul>
<p>loss-function에 의해 최적화된 결과가 비즈니스 목표와 일치하지 않을 수 있다. 이를 위해 multi-task learning 연구가 진행되고 있으나, 완전히 해결되지 않는 실무적인 부분이 존재한다. 이러한 점이 추천 시스템을 어렵게 만드는 요인 중에 하나이다.</p>
<ol start="4">
<li>Cold-Start Problem
<img src="https://velog.velcdn.com/images/b-jayu/post/2b26d875-b071-4ce1-a446-181a4861cb96/image.png" alt=""></li>
</ol>
<ul>
<li>아무리 좋은 추천 시스템이라 할지라도, 신규 유저 혹은 아이템에 어떠한 interaction이 존재하지 않는다면 알고리즘 추론이 잘 작동하지 않는 현상</li>
<li>cold user는 충분한 사용패턴을 만들지 못한 사용자를 의미하며, cold item은 연관지을 수 있는 사용자 정보가 없는 items, 선택받지 못한 items을 의미한다.</li>
</ul>
<ol start="5">
<li>No clear Ground Truth
<img src="https://velog.velcdn.com/images/b-jayu/post/6a090947-187c-4deb-aa8b-8f8766e694de/image.png" alt=""></li>
</ol>
<ul>
<li>추천 시스템에서 유저의 선호도는 주관적이고 변동성이 크다.
=&gt; 그렇기 때문에, 유저 스스로 선호를 불분명하게 인지하고 있어 명확한 레이블(실제 값)이 존재하지 않는다.</li>
<li>추천 알고리즘의 결과로 나온 것들만 유저가 소비할 수 있는 시스템의 경우, 모델의 판단 자체가 고객의 행동에 영향을 미친다.</li>
</ul>
<h4 id="추천-시스템의-파이프라인">추천 시스템의 파이프라인</h4>
<blockquote>
<p>고전 추천 시스템의 전형적인 구성을 이해해본다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c7320382-4287-4765-92ba-46f1f7585ec3/image.png" alt=""></p>
<ul>
<li>고전적인 추천 시스템은 유저의 과거이력, 추천시점에 따라 추천하고자 하는 정보 후보군을 생성하고 재정렬해서 사용자에게 추천을 제공한다.</li>
<li>후보군 생성에 ANN(Approximate Near Neighbors), LSH(Locality Sensitive Hashing) 알고리즘 등이 활용될 수 있다</li>
</ul>
<h4 id="고전적인-추천-알고리즘">고전적인 추천 알고리즘</h4>
<h5 id="고전적-추천-알고리즘">고전적 추천 알고리즘</h5>
<ul>
<li>인구 통계 기반 필터링 : 연령, 나이, 직업과 같은 정보로 추천</li>
<li>인기도 기반 추천 : 인기 상품을 추천</li>
<li>지식 기반 추천 : 전문가의 지식이나, 유저의 입력에 기반한 추천</li>
<li>규칙 기반 추천 : 사전에 정의된 규칙에 의해 추천을 제공
이 중에서도 인구 통계 기반 필터링이나 인기도 기반 추천이 널리 사용되는 방식</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/914638b5-c422-4423-bb8a-5ffbe6798012/image.png" alt=""></p>
<ul>
<li>인구 통계 기반 필터링은 콜드스타트, 즉 유저에 대한 상호작용 정보가 없더라도 유저의 개인 정보를 통해 어느 정도 적당한 추천 정보를 제공할 수 있다.</li>
<li>그러나 개인화되지 않으며, 고정관념에 기반한 추천이라는 단점이 있고, 민감정보를 다루는 한계가 존재한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/725852fd-4cb4-4e36-96a2-8e0578db04a7/image.png" alt=""></p>
<ul>
<li>인기도 기반 추천은 직관적이고, 단순하지만 어떤 플랫폼에서는 강력한 방법으로 작용할 수 있으며, 널리 쓰이는 방식 중 하나이다.</li>
<li>복잡한 모델보다 인기도 기반의 추천이 더 효율적인 결과를 제공해주기도 한다.</li>
<li>인기도를 측정하는 메트릭은 다양할 수 있다</li>
<li>인기도 기반 추천도 인구통계학 정보 기반 추천과 마찬가지로, 개인화된 추천을 제공해주지는 않는다. 한 번도 선택되지 않은 신규 아이템에 대한 아이템 코드 스타트 단점을 지니고 있다.  </li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/ec3b1119-9f9e-42fe-b813-8ae0a6b6992b/image.png" alt=""></p>
<ul>
<li>필터 버블이라는 현상이 발생할 수 있는데, 이는 개인화 알고리즘으로 인해 사용자가 제한된 정보나 추천에만 노출되는 현상을 의미한다.</li>
<li>기존의 사용자 패턴정보와 의견에 노출도리 가능성이 높아져 유사한 콘텐츠의 &#39;거품&#39;이 형성되는 것에서 비롯된 용어</li>
<li>제한된 다양성의 아이템만 유저에게 노출되는 문제를 발생시킨다. 소셜미디어에서 편향된다면, 사고하는 방식이나 시아야 악영향을 미칠 수 있다.</li>
</ul>
<h5 id="연관-규칙-기반-추천">연관 규칙 기반 추천</h5>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/b6d1609e-559e-43b1-a2a9-17e8b893b8aa/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/d4f3267a-1e7e-413b-b429-6ce3c125dbcd/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/323adfbf-88ec-4657-a147-e62554483dc1/image.png" alt=""></p>
<p>규칙 성능 지표
<img src="https://velog.velcdn.com/images/b-jayu/post/b743694f-34ea-46ae-a7dc-daf48828da27/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/18c3ae2e-dcd0-4734-a1d3-0bc5fe65139e/image.png" alt=""></p>
<p>규칙 생성 알고리즘
<img src="https://velog.velcdn.com/images/b-jayu/post/0221dcd1-0875-4521-8bf3-90e6e270265c/image.png" alt="">
<img src="https://velog.velcdn.com/images/b-jayu/post/b9d6c026-23ff-4f7c-be93-0690ec0db282/image.png" alt=""></p>
<h5 id="컨텐츠-필터링">컨텐츠 필터링</h5>
<blockquote>
<p>&quot;너가 좋아했던 그거, 이것도 그거랑 비슷하던데?&quot;</p>
</blockquote>
<ul>
<li>비슷한 것을 찾기 위해, 수치형태로 나타내고 비슷한 정도를 계산해야 한다.</li>
<li>수치 형태로 표현하기 위해, 각 아이템의 특성을 feature로 나타낼 수 있고, 변수의 종류에 따라 다른 처리가 필요하다.</li>
<li>연속형 변수 : 정규화 후 수치 형태 가공</li>
<li>범주형 변수 : one-hot encoding</li>
</ul>
<p>유사도 계산하기
<img src="https://velog.velcdn.com/images/b-jayu/post/0c03cc15-025e-429b-b30f-ab05fecf1b21/image.png" alt=""></p>
<p>컨텐츠 필터링 구현 절차
<img src="https://velog.velcdn.com/images/b-jayu/post/a3fee41c-5a5c-4667-a76d-9ff5a3eb43ad/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/d1a2575e-502f-41cb-ae9e-6f276f72fe49/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e47b6992-0de2-40e4-a254-648e127ba42f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c38db5ed-c97c-4700-b1a6-9326fde2eca6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/f650f657-e6cd-49fd-aa61-f48315ab397e/image.png" alt=""></p>
<h5 id="협업-필터링">협업 필터링</h5>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/7e0969c9-d001-4e31-8149-62422cf3c656/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/d921abe3-51e7-46fe-b7d8-86b63113fba0/image.png" alt=""></p>
<ul>
<li>유저의 반응은 변동성이 크고 모호하기 때문에, 해당 정보를 feature 벡터로 사용한다면 직관적으로 이해하기 어려울 수 있다.</li>
</ul>
<p>장점</p>
<ul>
<li>다른 사용자의 정보를 활용하여 개인화 추천을 하기 때문에, 유사한 집단을 찾아 개인화된 추천을 제공함.</li>
<li>상호작용 데이터가 쌓일수록 더 정교한 추천이 가능해진다</li>
</ul>
<p>단점
<img src="https://velog.velcdn.com/images/b-jayu/post/f1c2c67e-6344-4500-b108-48c48a91329d/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Intro] 나의 취준 이야기 - 내가 추천 시스템을?]]></title>
            <link>https://velog.io/@b-jayu/Intro-%EB%82%B4%EA%B0%80-%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84</link>
            <guid>https://velog.io/@b-jayu/Intro-%EB%82%B4%EA%B0%80-%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84</guid>
            <pubDate>Mon, 03 Jul 2023 09:17:24 GMT</pubDate>
            <description><![CDATA[<p>이 글을 쓰고 있는 시점은 내가 4학년... 아니 5학년 1학기를 끝으로 대학교 생활을 마무리하게 되는 시점이다. 물론 아직 갈 곳이 정해지지 않은 취준생 신분이다.
2023년도 상반기 공채를 최합 기준 0승 14패로 마무리 하게 되었고, 서류기준 3승이라는 나름 성과도 얻었다고 할 수 있다. 무엇보다 면접의 기회를 가졌다는 점에서 고무적인 성과라 할 수 있다. 하지만 취업성공이라는 목표를 성취하지 못해 낙담하기도 하고 힘든시기 임은 틀림없는 것 같다.
<img src="https://velog.velcdn.com/images/b-jayu/post/a43304ee-f518-4858-a493-ad436eedf9cd/image.png" alt=""></p>
<p>3학년 2학기에 복학을 하면서, 무작정 전공을 살려야 겠다는 다짐을 하며 빅데이터와 AI를 선택하게 되었다. 실력은 부족했지만, 나는 남들이 다 하는 길로는 잘 가지 않는 타입이었기 때문에 첫 시작은 기세등등했다.  뭐든 할 수 있을 것만 같은 희망에 차올랐기 때문이다. 시작을 같이 했던 친구들이 떠나가고 빅데이터 연계전공을 이수하며 악착같이(?) 달려왔던 나는 실무적인 경험을 쌓고 싶어, 지역 기업과 함께 하는 데이터 분석 프로젝트를 진행했다. 
근데, 실무 프로젝트라기엔... 퀄리티나 성과가 학교 데이터 분석 과제를 하는 것 같은 느낌이었다. 밑바탕 없이 너무 달려든 게 아니란 생각을 했다. 그래서 기초부터 탄탄히 하고 싶다는 생각에 학업과 함께 기업교육을 이수하기로 하였다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/848d9d12-69e1-4dde-8962-e855dd620687/image.png" alt=""></p>
<p>운좋게 대기업 계열사에서 진행하는 3.5개월간의 원격 인턴십 기회를 가졌고 높은 경쟁률을 뚫고 서울 본사에서 리얼 인턴십 기회도 갖게 되었다.
내가 생각했던 직무분야는 데이터분야였지만, 인턴기간동안 난생처음 AI 연구와 프로젝트를 기획해야 하는 업무를 맡았다.
짧았던 4주동안에 성과를 내야 한다는 생각에, 나 스스로의 목표를 설정하지도 못한 아쉬움이 컸다. </p>
<p>최근 들어 우리 일상을 AI기술들이 뒤흔들고 있다는 기사를 쉽게 접할 수 있다. 대규모 IT플랫폼 회사들은 AI기술 경쟁에 돌입하기 시작했고, 세계 초거대 AI열강들도 국내 기업을 눈독들이고 있다고 한다.
AI 기술을 통해 사회, 경제, 나아가 인류 자체가 바뀔지 모르는 상황에서 기술에 대한 우려와 공포감이 생길 수 밖에 없다.</p>
<p>나는 이러한 시대적 상황에서, AI에 대한 정확한 이해를 통해 우려와 공포를 줄여나가는 역할을 해나가고 싶다. </p>
<p>나는 평소에도 내가 가지고 있는 지식이나 장점을 나누고 싶다는 생각을 많이 한다. 내가 배운 IT전공기술을 바탕으로 세상을 편리하고 이롭게 하고 싶다는 추상적인 목표를 가져왔다.
AI를 공부하면서 추천시스템이라는 AI분야에 관심을 갖게 되었다. 유저의 측면에서 원하는 것을 빠르게 찾을 수 있는 효율성을 제공할 수 있고, 유저가 알지 못했던 새로운 존재를 깨닫게 해주는 즐거움을 선사할 수 있다는 점에서 내가 추구하는 목표를 이룰 수 분야라고 생각했다.</p>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/04474604-34d7-4ae3-beba-dd1a4893d722/image.png" alt="">
다양한 AI 강의 및 기업의 실무교육을 지원하면서, 실생활 문제를 발굴하고 해결하는 AI 문제 해결자가 되고 싶어졌다. 개발이 내 적성에 맞는 것인지 아직 잘 모르겠고 가끔은 전공에 대한 회의감이 들 때도 있지만, 이건 내 마지막 도전이라는 각오로 한 번 더 도전해보려 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers] 다음 큰 숫자(Python)]]></title>
            <link>https://velog.io/@b-jayu/Programmers-%EB%8B%A4%EC%9D%8C-%ED%81%B0-%EC%88%AB%EC%9E%90Python</link>
            <guid>https://velog.io/@b-jayu/Programmers-%EB%8B%A4%EC%9D%8C-%ED%81%B0-%EC%88%AB%EC%9E%90Python</guid>
            <pubDate>Mon, 26 Jun 2023 14:34:29 GMT</pubDate>
            <description><![CDATA[<p>[Programmers Lv.2] 다음 큰 숫자
문제를 풀어보려 한다.</p>
<h4 id="문제">[문제]</h4>
<blockquote>
</blockquote>
<p>자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.</p>
<blockquote>
<ul>
<li>예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.</li>
<li>자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.</li>
<li>제한 사항
n은 1,000,000 이하의 자연수 입니다.</li>
</ul>
</blockquote>
<h4 id="문제-풀이">[문제 풀이]</h4>
<p>처음에는 숫자의 규칙성 또는 shift 연산을 통해 문제를 푸려보려 하였지만 쉽게 해답이 보이지 않았다. 
그래서 어렵게 생각하지 않고, 문제 설명을 있는 그대로 해석해보았다. </p>
<p>주어진 10진수 숫자를 2진수로 변환하여, 1의 개수를 count할 수 있다.
이는 python 내의 bin()과 count() 내장 함수를 통해 알아낼 수 있다.</p>
<p>n+1 부터 반복문을 수행할 때 bin() 함수와 count()함수를 사용하여, 입력으로 주어진 입력값 n과 이진수 변환 시 1의 개수가 같은지 확인하면 된다.</p>
<pre><code>def solution(n):
    answer = 0
    count1 = bin(n).count(&quot;1&quot;)

    for i in range(n+1, 1000001):
        count2 = bin(i).count(&quot;1&quot;)

        if count1 == count2:
            answer = i
            return answer
    return answer</code></pre><h4 id="느낀-점">느낀 점</h4>
<p>시간 효율성을 위해 최적의 해답을 찾으려 할 때가 많지만, 첫 시도는 문제의 뜻을 잘 해석하고 문제를 코드로 풀어쓸 줄 알아야한다는 것!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[신경망2]]></title>
            <link>https://velog.io/@b-jayu/%EC%8B%A0%EA%B2%BD%EB%A7%9D2</link>
            <guid>https://velog.io/@b-jayu/%EC%8B%A0%EA%B2%BD%EB%A7%9D2</guid>
            <pubDate>Mon, 26 Jun 2023 06:53:20 GMT</pubDate>
            <description><![CDATA[<h2 id="다층-퍼셉트론mlp">다층 퍼셉트론(MLP)</h2>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/6b5d53e7-620b-48a6-a526-0a73a2796c96/image.png" alt=""></p>
<ul>
<li>단일 선형분리 만으로는 분리 불가능한 문제를, 여러 개의 선을 이용하면 분리할 수 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/c412a782-4526-47a1-8b31-f749f6381b52/image.png" alt=""></p>
<ul>
<li>(x0, x1, x2) 로 표현되던 feature space → (z1, z2) feature space로 변환<ul>
<li>축을 변환시키면, 쉽게 선형 분리가 가능해 질 수 있다.</li>
<li>퍼셉트론 1과 퍼셉트론 2는 feature space를 변환하기 위해 사용<ul>
<li><strong>그렇다면, 축의 변환을 어떻게 할 수 있는가?</strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/5ee83dd8-f2c2-4d7a-859a-0d57fdad890d/image.png" alt=""></p>
<ul>
<li>퍼셉트론3 은 이전 퍼셉트론 층에 의해서 변환된 feature space 내의 값을 input으로 하여 output을 산출하는 퍼셉트론 층이다.</li>
<li>단순히 층에서 퍼셉트론을 병렬배치 한 것이 아니라, 순차적으로 쌓기</li>
</ul>
<p><strong>[예제] XOR를 푸는 다층 퍼셉트론</strong></p>
<p><strong>신경망을 공간 변환기로 볼 수 있음</strong></p>
<ul>
<li>원래는 선형 분리가 불가능한 문제, 초기의 feature space의 값을, 선형분리가 가능하도록 퍼셉트론을 병렬 배치를 통해 feture space를 변환할 수 있다</li>
<li>이러한 feature space를 임시 공간 ⇒ 은닉층, 은닉 공간이라 함<ul>
<li>이전 공간보다 분류에 더 유리하도록 학습</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/e6d9eac9-7bd4-4114-9570-3c82ca69d9b7/image.png" alt=""></p>
<ul>
<li>입력 데이터 개수에 따라, 입력 층의 노드 개수를 결정</li>
<li>출력 데이터 개수에 따라, 출력 층의 노드 개수를 결정</li>
<li>그렇다면, 은닉층의 노드 개수는?, 은닉층의 깊이는 어떻게 결정할 수 있는가?<ul>
<li>은닉층의 노드 개수는 하이퍼 파라미터 ( 사용자의 입력에 따라 결정 )</li>
<li>초기 값을 지정하고, 최적화를 통해 최적의 노드 개수를 찾을 수 있다</li>
<li>은닉층의 노드 개수가 많으면, 신경망 용량이 커지고, 과적합 가능성이 높아짐<ul>
<li>학습시간이 오래 걸릴 수 있고, 일반화 성능이 떨어질 수 있다</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>아래 첨자에 유의할 것<ul>
<li>오른쪽 첨자가 이전 층의 노드, 왼쪽 첨자가 다음 층의 노드를 의미</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/a3eeadda-ed14-4721-9a04-669d19058718/image.png" alt=""></p>
<ul>
<li>[Activation Function] ReLU<ul>
<li>은닉층에서 가장 많이 사용되는 활성 함수</li>
<li>왜 많이 사용할까?<ul>
<li>기존에는 sigmoid 함수를 많이 사용하였으나, 시그모이드는 출력값이 0 ~ 1가 나옴에 따라, 시간이 지날수록, 0에 수렴하는 기울기 소실 문제가 많이 발생할 수 있다.</li>
<li>ReLU는 양수 범위에서는 자기 자신 값을 반환하므로, 기울기 소실문제가 발생하지 않고, 음수인 경우 0을 반환하므로, +/-가 반복되는 신호에서 - 신호 흐름을 차단할 수 있다.<ul>
<li>학습 속도와 가중치 업데이트 속도가 매우 빠르다</li>
<li>입력 값이 음수인 경우, 기울기가 0이 되어 가중치 업데이트가 되지 않는 한계점이 존재함</li>
<li>기울기 소실을 방지하기 위한 함수이기 때문에, 은닉층에서만 사용할 것</li>
<li>0에서 미분이 되지 않는 문제점 또한 있다</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>[Activation Function] softmax</li>
</ul>
<h2 id="mlp-학습-방법">MLP 학습 방법</h2>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/44f34f7f-acae-4dab-bfc5-7feeec31f0f4/image.png" alt=""></p>
<ul>
<li>손실함수 J 에 vertical line이 두 개가 있다<ul>
<li>제곱했는 계산에 root 계산이 적용되었음을 의미 (손실함수값의 과대화 방지)</li>
<li>RMSE ⇒ Root of MSE , 평균제곱오차에 제곱근 계산이 적용됨</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/b-jayu/post/ceaa89b2-bda9-4e68-a9c4-35316837f3f5/image.png" alt=""></p>
<ul>
<li>오차를 계산하고, 손실을 줄여나갈 수 있는 가장 좋은 방법은 예측값을 산출하는 가장 마지막층의 가중치부터 점진적으로 수정해 나가는 것이 가장 좋다</li>
<li>모델 학습과 반대 방향으로의 가중치 개선 ⇒ 오류 역전파</li>
</ul>
<h2 id="mlp-하이퍼-파라미터">MLP 하이퍼 파라미터</h2>
<ul>
<li>Hidden layer의 # node</li>
<li>다양한 하이퍼 파라미터들이 존재
<img src="https://velog.velcdn.com/images/b-jayu/post/8c4d9ec6-2e62-4eba-801b-beaec4c2a544/image.png" alt=""></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>