<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>데이터마케터.log</title>
        <link>https://velog.io/</link>
        <description>데이터로 마케팅을 해보고 싶습니다~ 데이터 분석가도 좋아요!!</description>
        <lastBuildDate>Wed, 27 Nov 2024 18:05:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. 데이터마케터.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/data-marketing" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[머신러닝] 랜덤포레스트(앙상블 기법)]]></title>
            <link>https://velog.io/@data-marketing/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%9E%9C%EB%8D%A4%ED%8F%AC%EB%A0%88%EC%8A%A4%ED%8A%B8%EC%95%99%EC%83%81%EB%B8%94-%EA%B8%B0%EB%B2%95</link>
            <guid>https://velog.io/@data-marketing/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%9E%9C%EB%8D%A4%ED%8F%AC%EB%A0%88%EC%8A%A4%ED%8A%B8%EC%95%99%EC%83%81%EB%B8%94-%EA%B8%B0%EB%B2%95</guid>
            <pubDate>Wed, 27 Nov 2024 18:05:26 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 이번에는 랜덤포레스트라는 모델에 대해 알아보고자 합니다. 앙상블 기법 중 하나인 이 랜덤포레스트를 어렵지만 같이 볼까요?</p>
<hr></hr>

<h1 id="1-앙상블이란">1. 앙상블이란?</h1>
<blockquote>
</blockquote>
<h2 id="정의">정의</h2>
<p>여러개의 개별 모델을 조합하여 최적의 모델로 일반화 하는 방법을 앙상블 기법이라고 합니다.
앙상블 기법은 여러 모델의 예측 결과를 합쳐 더 나은 예측을 하도록 합니다. 핵심은 <span style = 'color : red'><strong>여러 모델들이 서로 다른 방식으로 학습해야 한다는 것</strong></span>입니다.</p>
<blockquote>
<h2 id="종류">종류</h2>
</blockquote>
<h3 id="1-배깅부트스트랩">1. 배깅(부트스트랩)</h3>
<p>: 배깅은 <strong>데이터의 여러 부분집합을 샘플링</strong>하여 <strong>각각의 모델을 독립적으로 학습</strong>시킨 후, 그 <strong>예측 결과를 평균</strong>하거나 <span style = 'color : red'><strong>다수결</strong></span>을 통해 결합하는 방법
** 모델 종류 ** : 랜덤 포레스트(Random Forest)</p>
<blockquote>
</blockquote>
<h3 id="2-부스팅">2. 부스팅</h3>
<p>: 이전 모델이 <span style = 'color : red'><strong>잘못 예측한 데이터를 다음 모델이 더 잘 예측</strong></span>하도록 학습하는 방식입니다. 모델들이 <strong>순차적</strong>으로 학습하여, 이전 모델의 <strong>오류를 보정</strong></p>
<blockquote>
</blockquote>
<p>** 모델 종류 ** : Gradient Boosting, XGBoost, LightGBM</p>
<blockquote>
</blockquote>
<h3 id="3-스태킹">3. 스태킹</h3>
<p>: <span style = 'color : red'><strong>여러 개의 다른 모델들</strong></span>을 학습시키고, 그 <span style = 'color : red'><strong>모델들의 예측을 다시 다른 모델(보통 메타모델)에</strong></span> 넣어서 최종 예측을 만드는 방법</p>
<p>앙상블 기법의 종류는 다음과 같이 3개가 있으며 그 중 오늘은 배깅 기법을 통한 모델인 <strong>랜덤포레스트</strong>에 대해 알아보겠습니다.</p>
<h1 id="2-랜덤포레스트">2. 랜덤포레스트</h1>
<blockquote>
<h2 id="정의-1">정의</h2>
<p>배깅(Bagging) 기법을 기반으로 한 앙상블 학습 알고리즘입니다. 여러 개의 결정 트리(Decision Tree)를 생성하여, 각 트리의 예측을 종합함으로써 최종 예측을 도출하는 모델입니다.</p>
</blockquote>
<blockquote>
<h2 id="과정">과정</h2>
</blockquote>
<ol>
<li>데이터 샘플링
: <span style = 'color : red'><strong>부트스트랩 샘플링</strong></span>을 통해 샘플을 추출합니다. 이를 통해 여러 개의 <span style = 'color : red'><strong>훈련샘플 집합</strong></span>을 형성합니다. 이때 부트스트랩은 중복이 가능한 <span style = 'color : red'><strong>복원추출</strong></span>이므로 샘플링한 부분집합에 중복된 값이 들어갈 수 있습니다.<blockquote>
</blockquote>
</li>
<li>결정트리 학습
: 랜덤포레스트는 각 샘플에 대해 <span style = 'color : red'><strong>결정트리</strong></span>를 학습시킵니다. Decision Tree라고도 하는 이 모델링은 다음 챕터에서 다루어보도록 하겠습니다^^<blockquote>
</blockquote>
</li>
<li>예측 결과 결합
: 모든 결정트리가 학습을 마치고 나면 각 <span style = 'color : red'><strong>트리의 예측을 결합</strong></span>합니다.
랜덤포레스트에서는 분류와 회귀 두개가 다 되는데</li>
</ol>
<ul>
<li><strong>분류</strong>
: 분류의 경우 <span style = 'color : red'><strong>다수결 투표 방식</strong></span>으로 각 트리가 예측한 <span style = 'color : red'><strong>결과 중 가장 많이 나온 클래스</strong></span>를 최종 예측값으로 결정합니다.</li>
<li><strong>회귀</strong>
: 각 트리의 예측값을 내어 최종 예측값을 도출합니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/f0335418-10f2-4b0c-83e0-79bf182ffd65/image.png" alt="">
다음과 같은 과정으로 모델이 학습됩니다.</li>
</ul>
<blockquote>
<h2 id="장점">장점</h2>
</blockquote>
<ol>
<li><strong>과적합 방지</strong>
: 대부분의 앙상블 모델 기법은 과적합을 방지합니다. 랜덤포레스트도 기반이 되는 결정트리라는 모델을 학습에 활용하는데 이 모델은 노드를 최적화 하는 특징으로 가지가 뻗는 경향이 있어 과적합될 위험이 있습니다.<blockquote>
</blockquote>
</li>
<li><strong>특징 중요도 평가</strong> 
: 랜덤 포레스트는 각 특징이 모델에 얼마나 중요한지 평가할 수 있는 기능이 있습니다. 특징 중요도를 계산하여, 모델에 가장 큰 영향을 미치는 변수를 파악할 수 있습니다.</li>
</ol>
<blockquote>
<h2 id="단점">단점</h2>
</blockquote>
<ol>
<li>해석의 어려움
: 여러개의 트리를 결합한 것이므로 최종 모델이 결과를 어떻게 도출했는지 <strong>해석의 어려움</strong>이 존재합니다.<blockquote>
</blockquote>
</li>
<li>메모리 사용
: 여러 개의 결정 트리를 학습시키기 때문에, 메모리 사용량이 많을 수 있습니다. 특히 데이터가 클 경우 메모리 부담이 커질 수 있습니다.</li>
</ol>
<blockquote>
<h2 id="파라미터">파라미터</h2>
</blockquote>
<pre><code>rf_model = RandomForestClassifier(
    n_estimators=200,      # 200개의 트리 사용
    max_depth=10,          # 트리의 최대 깊이를 10으로 제한
    min_samples_split=4,   # 분할을 위한 최소 샘플 수를 4로 설정
    min_samples_leaf=2,    # 리프 노드에 최소 2개의 샘플이 있도록 설정
    max_features=&quot;sqrt&quot;,   # 각 트리가 사용할 특징의 개수를 sqrt(n_features)로 설정
    bootstrap=True,        # 부트스트랩 샘플링 사용
    n_jobs=-1,             # 모든 코어를 사용하여 병렬 처리
    random_state=42        # 결과의 재현을 위해 난수 시드 설정
)</code></pre><p>여기서 리프 노드란 <strong>더 이상 분할되지 않는 노드</strong>로, <strong>최종 예측 결과</strong>를 담고 있는 부분, 
n_jobs는 cpu코어를 몇개 사용할지 입니다. -1은 전부다 1은 1개의 코어만 이런식인거죠~^^
feature란 랜덤 포레스트는 각 트리마다 전체 특성 중 일부를 랜덤하게 선택하여 분할을 만듭니다. 이때 고려할 그 특성(feature)들의 수를 max_features에서 몇개를 선택할지를 쓴 것입니다.</p>
<p>오늘은 여기까지 랜덤포레스트 모델에 대해 알아봤습니다. 간단한 난이도 있는 개념이니 꼭 숙지하시면 좋을 것 같아요! 다음번에는 의사결정트리로 돌아오겠습니다! 감사합니다~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 물고기 종류 별 대어 찾기
, 잡은 물고기 중 가장 큰 물고기의 길이 구하기-(프로그래머스 문제풀이 SQL고득점KIT)]]></title>
            <link>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%BC%EA%B3%A0%EA%B8%B0-%EC%A2%85%EB%A5%98-%EB%B3%84-%EB%8C%80%EC%96%B4-%EC%B0%BE%EA%B8%B0-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</link>
            <guid>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%BC%EA%B3%A0%EA%B8%B0-%EC%A2%85%EB%A5%98-%EB%B3%84-%EB%8C%80%EC%96%B4-%EC%B0%BE%EA%B8%B0-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</guid>
            <pubDate>Wed, 27 Nov 2024 13:06:21 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/data-marketing/post/de2b4ea7-67ad-4ab6-b8ec-be5e0ec79b97/image.png" alt="">
이번에도 SQL문제 3탄으로 돌아왔습니다. SQL기초 문제 중 문법적으로 알아보면 좋을 문제 2문제 알아보고 가겠습니다.
<HR></HR></p>
<h1 id="1-물고기-종류-별-대어-찾기">1. 물고기 종류 별 대어 찾기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/293261">문제</a></p>
</blockquote>
<h2 id="문제설명">문제설명</h2>
<ul>
<li><p>2개의 테이블이 있습니다.</p>
</li>
<li><p><strong>TABLE</strong> : FISH_INFO</p>
</li>
<li><p><strong>COLUMN</strong> : ID, FISH_TYPE, LENGTH, TIME</p>
</li>
<li><p><strong>테이블 생김새</strong> : </p>
<table>
<thead>
<tr>
<th align="left"><center>ID</center></th>
<th>FISH_TYPE</th>
<th align="center">LENGTH</th>
<th align="right"><center>TIME</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td>0</td>
<td align="center">30</td>
<td align="right">2021/12/04</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1</td>
<td>0</td>
<td align="center">50</td>
<td align="right">2020/03/07</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<ul>
<li><strong>TABLE</strong> : FISH_NAME_INFO</li>
</ul>
</li>
<li><p><strong>COLUMN</strong> : FISH_TYPE, FISH_NAME</p>
</li>
<li><p><strong>테이블 생김새</strong> : </p>
<table>
<thead>
<tr>
<th align="left"><center>FISH_TYPE</center></th>
<th align="right"><center>FISH_NAME</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td align="right">BASS</td>
</tr>
<tr>
<td align="left">1</td>
<td align="right">SNAPPER</td>
</tr>
<tr>
<td align="left"><BR></BR></td>
<td align="right"></td>
</tr>
</tbody></table>
</li>
<li><p><strong>문제</strong> : </p>
</li>
</ul>
<ol>
<li>물고기의 ID 컬럼명은 ID, 이름 컬럼명은 FISH_NAME, 길이 컬럼명은 LENGTH로 해주세요.</li>
<li>결과는 물고기의 ID에 대해 오름차순 정렬</li>
<li>단, 물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다.
<BR></BR></li>
</ol>
<ul>
<li><strong>풀이문법</strong> : <ul>
<li><strong>JOIN ON</strong> : SQL에서 <strong>두 개 이상의 테이블을 연결</strong>하여 원하는 데이터를 결합할 때 사용하며 <strong>ON</strong>은 <strong>두 테이블간 조건을 지정</strong>할 때 사용합니다.<ul>
<li><strong>AS ~</strong> </li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<h3 id="풀이과정">풀이과정</h3>
<p>이번 문제는 JOIN을 알아야합니다. 두개 이상의 테이블을 결합하여 왔다갔다?할 때 JOIN을 많이 활용하는데요. 그럼 예제를 통해 생소한 이 JOIN에 대해 보겠습니다.
<HR></HR>
일단 예시 결과는 다음과 같습니다.</p>
</blockquote>
<pre><code>ID    FISH_NAME    LENGTH
6    BASS         60
8    ANCHOVY         73
9    SNAPPER         73</code></pre><p>ID가 있는 테이블은 FISH_INFO이고 FISH_NAME이 있는 테이블은 FISH_NAME_INFO이며 LENGTH가 있는 테이블은 FISH_INFO로 서로 <span style = 'color : red'><strong>하나의 테이블에 있지않고 여러 테이블에 컬럼들이 흩어져</strong></span>있습니다.</p>
<blockquote>
</blockquote>
<p>그래서 위와 같은 결과를 내기 위해 FISH_INFO테이블에서는 ID와 LENGTH를 FISH_NAME_INFO테이블에서는 FISH_NAME을 출력해야 합니다. </p>
<blockquote>
<p>이제 본격적으로 문제풀이를 순서대로 한번 봅시다.</p>
</blockquote>
<ol>
<li>저는 2개 이상의 테이블을 활용할 때 <strong>FROM구문부터 활용</strong>합니다. 그리고 <strong>테이블명이 길기 때문에 이를 FI</strong>라고 명명해줍니다. 이때 <strong>AS구문</strong>을 사용합니다.</li>
</ol>
<p><strong>ON</strong>을 사용할 때는 결합할 2개의 테이블에 공통으로 존재하는 컬럼을 선택해줍니다.</p>
<pre><code>FROM
    FISH_INFO AS FI
JOIN
    FISH_NAME_INFO AS FN
ON
    FI.FISH_TYPE = FN.FISH_TYPE</code></pre><blockquote>
</blockquote>
<ol start="2">
<li>물고기 종류별 가장 큰 물고기는 1마리만 있으며 10cm 이하의 물고기가 가장 큰 경우는 없습니다. 이 구문을 이용해서 LENGTH가 최대인 친구들만 가져와줍니다. <span style = 'color : red'><strong>메인 쿼리는 각 행의 LENGTH가 서브쿼리에서 계산한 MAX(LENGTH)와 동일한 행만 반환</strong></span>합니다.<pre><code>WHERE
 FI.LENGTH = (
     SELECT MAX(F.LENGTH)
     FROM FISH_INFO F
     WHERE F.FISH_TYPE = FI.FISH_TYPE
 )</code></pre><blockquote>
</blockquote>
</li>
<li>ID에 오름차순 정렬<pre><code>ORDER BY ID ASC;</code></pre><blockquote>
</blockquote>
</li>
<li>그래서 결국<pre><code>SELECT
 ID, FISH_NAME, LENGTH</code></pre>가 됩니다.</li>
</ol>
<hr></hr>

<h1 id="2-잡은-물고기-중-가장-큰-물고기의-길이-구하기">2. 잡은 물고기 중 가장 큰 물고기의 길이 구하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/298515?language=mysql">문제</a></p>
</blockquote>
<h2 id="문제설명-1">문제설명</h2>
<p>위 문제와 크게 달라지지 않지만 알아갈게 있는 문제입니다.</p>
<ul>
<li><p><strong>TABLE</strong> : FISH_INFO</p>
</li>
<li><p><strong>COLUMN</strong> : ID, FISH_TYPE, LENGTH, TIME</p>
</li>
<li><p><strong>테이블 생김새</strong> : </p>
<table>
<thead>
<tr>
<th align="left"><center>ID</center></th>
<th>FISH_TYPE</th>
<th align="center">LENGTH</th>
<th align="right"><center>TIME</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">0</td>
<td>0</td>
<td align="center">30</td>
<td align="right">2021/12/04</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1</td>
<td>0</td>
<td align="center">50</td>
<td align="right">2020/03/07</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
</li>
</ul>
<ul>
<li><strong>문제</strong> : </li>
</ul>
<ol>
<li>FISH_INFO 테이블에서 잡은 물고기 중 가장 큰 물고기의 길이를 &#39;cm&#39; 를 붙여 출력하는 SQL 문을 작성</li>
<li>컬럼명은 &#39;MAX_LENGTH&#39; 로 지정
<BR></BR></li>
</ol>
<ul>
<li><strong>풀이문법</strong> : <ul>
<li><strong>CONCAT</strong> : 여러 문자열을 하나로 결합하는데 활용<ul>
<li><strong>AS ~</strong> </li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<h3 id="풀이과정-1">풀이과정</h3>
<p>예시 결과를 먼저 보겠습니다.</p>
</blockquote>
<pre><code>MAX_LENGTH
50.00cm</code></pre><p>이렇게만 나오면 됩니다. 하지만 cm를 붙이는게 걸리는데 이거는 <strong>CONCAT</strong>함수를 활용하면 됩니다!</p>
<blockquote>
</blockquote>
<p>CONCAT : CONCAT(string1, string2, ..., stringN)
다음과 같으며 이 결과를 내기 위해서는</p>
<ol>
<li>가장 큰! 이므로 MAX함수를 활용합니다.<pre><code>SELECT 
 CONCAT(MAX(LENGTH), &#39;cm&#39;) AS MAX_LENGTH
FROM
 FISH_INFO</code></pre>사실 이게 끝입니다.
CONCAT함수를 알면 쉽게 풀 수 있는 문제였습니다!</li>
</ol>
<p>오늘은 이렇게 물고기 2문제를 봤어요! 새로운 함수인 JOIN과 CONCAT에 대해 배웠는데 다음에는 더 양질의 문제로 돌아오겠습니다!
감사합니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터 전처리] 유사도 구성과 이를 통한 제품 추천? 영화 리뷰추천?(tf-idf, cosine_sim)]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EC%9C%A0%EC%82%AC%EB%8F%84-%EA%B5%AC%EC%84%B1%EA%B3%BC-%EC%9D%B4%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%A0%9C%ED%92%88-%EC%B6%94%EC%B2%9C-%EC%98%81%ED%99%94-%EB%A6%AC%EB%B7%B0%EC%B6%94%EC%B2%9Ctf-idf-cosinesim</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EC%9C%A0%EC%82%AC%EB%8F%84-%EA%B5%AC%EC%84%B1%EA%B3%BC-%EC%9D%B4%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%A0%9C%ED%92%88-%EC%B6%94%EC%B2%9C-%EC%98%81%ED%99%94-%EB%A6%AC%EB%B7%B0%EC%B6%94%EC%B2%9Ctf-idf-cosinesim</guid>
            <pubDate>Sat, 23 Nov 2024 17:10:35 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 오늘은 데이터 전처리에 대해 써보고자 합니다. 앞서 배웠던 스케일링 기법 또한 데이터 전처리의 한 분야인데요!
이번에는 tf-idf, cosine유사도에 대해 배워보며 영화추천 코드까지 같이 한번 알아보도록 하겠습니다.</p>
<hr></hr>

<h1 id="1-tf-idf">1. TF-IDF</h1>
<blockquote>
<h2 id="정의">정의</h2>
<p><strong>TF-IDF</strong> (단어 빈도-역 문서 빈도, Term Frequency-Inverse Document Frequency)</p>
</blockquote>
<ul>
<li><span style = 'color : red'><strong>각 단어의 중요도를 계산</strong></span>하여 <span style = 'color : red'><strong>텍스트 데이터를 수치적으로 표현</strong></span>하는 기법</li>
<li>특정 문서에서 자주 등장하지만, 다른 문서에서는 드물게 등장하는 단어에 높은 가중치를 부여</li>
<li>텍스트 데이터가 고차원 <span style = 'color : red'><strong>벡터 형태</strong></span>로 변환<blockquote>
</blockquote>
이 가장 기본적인 정의 및 의미인데요.
이제 하나씩 뜯어봅시다!</li>
</ul>
<h3 id="1-1-tfterm-frequency">1-1. TF(Term Frequency)</h3>
<ul>
<li>특정 단어가 문서에 얼마나 등장했는가?</li>
<li>많이 등장할 수록 중요단어로 인식<h3 id="1-2-idfinverse-document-frequency-역문서-빈도">1-2. IDF(Inverse Document Frequency 역문서 빈도)</h3>
</li>
<li>단어가 여러 문서에 걸쳐 얼마나 자주 등장했는지 측정</li>
<li>너무 흔한 단어는 중요하지 않으므로 가중치를 낮춤</li>
<li>예) the, and같은 단어들은 단어를 연결하는 어디서나 등장하는 단어이므로 중요도가 낮음</li>
</ul>
<p>즉, TF-IDF값이 낮을수록 중요도가 낮고 값이 높을수록 중요도가 높음을 알 수 있습니다</p>
<blockquote>
<h2 id="활용">활용</h2>
</blockquote>
<ul>
<li>문서 유사도</li>
<li>검색 시스템에서 결과의 중요도를 정하는 작업</li>
<li>리뷰에서 긍정과 부정을 구분할 때</li>
<li>문서 내에서 특정 단어의 중요도 확인</li>
</ul>
<blockquote>
<h2 id="예시">예시</h2>
<p>문서 3개</p>
</blockquote>
<ul>
<li>문서1: &quot;사과 바나나&quot;</li>
<li>문서2: &quot;사과 오렌지&quot;</li>
<li>문서3: &quot;사과 바나나 바나나&quot;<blockquote>
<h3 id="계산">계산</h3>
</blockquote>
</li>
</ul>
<ol>
<li><strong>TF 계산(단어 빈도)</strong>
<img src="https://velog.velcdn.com/images/data-marketing/post/e74cb07a-f3dc-4a0c-af1d-18c596f9d553/image.png" alt="">
<img src="https://velog.velcdn.com/images/data-marketing/post/e1056011-03bd-4234-a5ce-aa958397297d/image.png" alt=""> <BR></BR></li>
<li><strong>IDF계산(역문서 빈도)</strong><blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/data-marketing/post/66e80543-8666-45ab-9c6a-0269f9b2206e/image.png" alt=""><img src="https://velog.velcdn.com/images/data-marketing/post/a7f60298-0cb6-4c43-96b0-999ca0cd6f60/image.png" alt=""></li>
<li>TF-IDF계산<blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/data-marketing/post/8d25e892-9659-4fb9-b6bc-4d3c6fabd712/image.png" alt=""><img src="https://velog.velcdn.com/images/data-marketing/post/5b18adde-f8dd-4169-8017-b7bba2946fa7/image.png" alt=""></li>
</ol>
<p><strong>해석</strong></p>
<ul>
<li>특정 문서에서 자주 등장하지만, 다른 문서에서는 드물게 등장하는 단어에 높은 가중치를 부여하는데 사과의 경우 모든 문서에 등장해 중요하다고 보지 않습니다.</li>
<li>바나나의 경우 일부 문서에 등장해 어느 정도 중요도가 있습니다.</li>
<li>오렌지는 한 문서에만 등장해 중요도가 높다고 판단됩니다.</li>
</ul>
<HR></HR>

<h1 id="2-cosine-유사도">2. COSINE 유사도</h1>
<blockquote>
<h2 id="정의-1">정의</h2>
<p><strong>코사인 유사도는 두 벡터간 유사도를 측정</strong>하는 것입니다. 앞에서 배웠던 벡터기초에서 유사도 이런얘기 많이 했는데요! 이것 때문에 코사인을 쓰는 것 같습니다. <strong>각이 예각일수록 유사도가 크다, 둔각일수록 관련성이 적다고 할 수 있습니다.</strong></p>
</blockquote>
<blockquote>
<h2 id="예시로-보기">예시로 보기</h2>
<p>코사인 유사도가 어떻게 적용이 될까요? 자세한 수식은 어려우니 간단한 설명으로 넘어가보겠습니다.</p>
</blockquote>
<ul>
<li>문서1: &quot;사과 바나나&quot;<blockquote>
</blockquote>
단어 빈도:
&quot;사과&quot;: 1번 등장
&quot;바나나&quot;: 1번 등장
벡터로 표현: [1, 1]<blockquote>
</blockquote>
</li>
<li>문서2: &quot;사과 바나나 바나나&quot;<blockquote>
</blockquote>
단어 빈도:
  &quot;사과&quot;: 1번 등장
  &quot;바나나&quot;: 2번 등장
  벡터로 표현: [1, 2] <blockquote>
<p>따라서 두 벡터는 비례관계에 있다고 할 수 있습니다.</p>
</blockquote>
</li>
</ul>
<hr></hr>

<h1 id="3-영화-추천">3. 영화 추천</h1>
<p>데이터는 영화리뷰 데이터가 있고 컬럼은 다음과 같습니다.</p>
<pre><code>Index([&#39;movieId&#39;, &#39;title&#39;, &#39;genres&#39;, &#39;imdbId&#39;, &#39;tmdbId&#39;, &#39;userId_x&#39;, &#39;rating&#39;,
       &#39;timestamp_x&#39;, &#39;userId_y&#39;, &#39;tag&#39;, &#39;timestamp_y&#39;],
      dtype=&#39;object&#39;)</code></pre><ol>
<li><p>우리가 주목할 부분이 movieId와 title, rating에서 결측치는 제거합니다. 그리고 title이 str이 아닌 형태는 다 제거해줍니다.</p>
<pre><code>data = data.dropna(subset = [&#39;movieId&#39;, &#39;title&#39;,&#39;rating&#39;])
data = data[data[&#39;title&#39;].apply(lambda x : isinstance(x, str))]
data</code></pre></li>
<li><p>movieId에서 중복이 되는 컬럼은 제거해줍니다.</p>
<pre><code>data_sampled = data.drop_duplicates(subset = [&#39;movieId&#39;]).reset_index(drop = True)</code></pre></li>
<li><p>tf-idf를 활용합니다. title을 기준으로 tf-idf점수를 매긴 후 matrix형태로 바꿔줍니다. matrix로 바꾸는 이유는 자연어 텍스트 데이터를 처리 가능한 수치 데이터로 바꿔주기 위해서 입니다.</p>
<pre><code>import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
</code></pre></li>
</ol>
<p>tfidf=TfidfVectorizer(stop_words = &#39;english&#39;)
tfidf_matrix = tfidf.fit_transform(data_sampled[&#39;title&#39;])</p>
<pre><code>4. cosine_sim을 계산해줍니다. 행렬 형태로 바꿔준 tfidf_matrix를 활용해 cosine_sim을 만들어줍니다.</code></pre><p>cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
cosine_sim</p>
<pre><code>5. 추천함수를 만들어줍니다.</code></pre><p>def recommendation(title, data = data_sampled, cosine_sim = cosine_sim) : 
    idx = data[data[&#39;title&#39;] == title].index[0]
    sim_scores = list(enumerate(cosine_sim[idx]))
    # 유사도 높은순서로 정렬
    sim_scores = sorted(sim_scores, key = lambda x : x[1], reverse = True)</p>
<pre><code>rec = []
for i, score in sim_scores : 
    if data[&#39;title&#39;].iloc[i] != title and score &lt; 0.99 : 
        rec.append(data[&#39;title&#39;].iloc[i])
    if len(rec) == 5 : 
        break
return rec</code></pre><pre><code>- 추천함수의 매개변수는 3개로 title : 내가 선정한 영화제목, data = data_sample, cosine_sim = cosine_sim을 넣어줍니다.
- idx = 내가 입력한 title의 값을 data에서 찾고 인덱스 값을 출력하여 idx에 저장합니다.
- 이 idx에 해당하는 cosine_sim을 구합니다. 그리고 이를 유사도 높은순서로 정렬해줍니다.
- sim_scores를 잠시 보고가면 다음과 같습니다.</code></pre><p>(1517, 1.0),
 (703, 0.3692687247777396),
 (145, 0.34449433911927485),</p>
<pre><code>- for문은 이 sim_score를 i와 score로 돌립니다.
- if문을 보면 title즉, 내가 입력한 title과 다르고 sim_scores의 점수가 0.99미만이면 rec에 저장해줍니다.
- 그리고 최대 5개까지 저장합니다.
6. 마지막으로</code></pre><p>title= data_sampled[&#39;title&#39;].iloc[7]
print(f&#39;우리가 추천하는 상품 설명:{title}&#39;)
print(&#39;\n추천 상품들:&#39;)
print(recommendation(title))</p>
<p>```
이거로 마무리하면 우리가 원하는 결과가 나옵니다~!</p>
<p>이렇게 오늘은 추천알고리즘에 대해 tf-idf를 활용해 공부했습니다!
오늘도 읽어주셔서 정말 감사해요~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[마케팅] 지표이름에 대해 알아보자[코호트(cohort), 리텐션(retention)]]]></title>
            <link>https://velog.io/@data-marketing/%EB%A7%88%EC%BC%80%ED%8C%85-%EC%A7%80%ED%91%9C%EC%9D%B4%EB%A6%84%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90%EC%BD%94%ED%98%B8%ED%8A%B8cohort-%EB%A6%AC%ED%85%90%EC%85%98retention</link>
            <guid>https://velog.io/@data-marketing/%EB%A7%88%EC%BC%80%ED%8C%85-%EC%A7%80%ED%91%9C%EC%9D%B4%EB%A6%84%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90%EC%BD%94%ED%98%B8%ED%8A%B8cohort-%EB%A6%AC%ED%85%90%EC%85%98retention</guid>
            <pubDate>Fri, 22 Nov 2024 07:07:46 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 이번에는 마케팅 용어들에 대해 공부해보고자 합니다!
저도 BDA회원으로서 여러 수업을 듣고 있는데 여기서 배우면 좋을 것 같은 단어들이 있어서 가져와봤어요! 같이 한번 알아봅시다!</p>
<hr></hr>

<h1 id="1-cohort">1. cohort</h1>
<blockquote>
<h2 id="정의">정의</h2>
<p>사회학에서 사용되는 용어로 <span style = 'color : red'><strong>코호트</strong></span>란 <span style = 'color : green'><strong>특정 기간에 특정 경험들을 공유하는 사람들</strong></span>을 말합니다.
특정 기간 동안 동일한 경험을 공유하는 유저 그룹을 분류하고 이들의 특성과 행동 패턴을 분석하여 마케팅 전략을 수립하는데 활용됩니다.</p>
</blockquote>
<blockquote>
<h2 id="활용">활용</h2>
<p>어느 상황에서 많이 진행할까요?
① 고객의 이탈 시점파악
② 소비 패턴을 파악 및 미래 예측
에서 많이 활용하는데요 예시를 봅시다.</p>
</blockquote>
<blockquote>
<h2 id="예시">예시</h2>
<p>① 유저가 많이 이탈하는 시점이 있을 것입니다. 이때 이들을 다시 우리 브랜드로 돌리도록 CRM마케팅을 진행할 수 있을 것 같습니다. 
② 1만원 쿠폰을 준 그룹과 5만원 쿠폰을 준 그룹 중 어느 쿠폰을 줬을 때 성과가 좋은지 성과를 비교할 때도 쓸 수 있을 것 같아요</p>
</blockquote>
<blockquote>
<h2 id="목표">목표</h2>
<p>결국 <span style = 'color : red'><strong>초개인화 시대에 맞는 마케팅</strong></span>을 진행하는데 가장 잘 활용할만한 분석방법인 것 같아요 특히, <span style = 'color : red'><strong>충성고객</strong></span>을 만드는데 좋은 방법으로 보입니다!</p>
</blockquote>
<HR></hr>

<h1 id="2-리텐션">2. 리텐션</h1>
<blockquote>
<h2 id="정의-1">정의</h2>
<p>리텐션이란, <span style = "color : red"><strong>어떤 제품에 대해 특정 기간동안 활성화된 유저 혹은 고객의 수</strong></span>를 말합니다. 보통 <strong>&#39;리텐션율&#39;</strong>이라는 비율을 통해서 나타내는대요. 공식을 한번 봅시다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/f9b6fa40-5959-4492-9f8e-3c5af592880c/image.png" alt=""> 를 <strong>리텐션율</strong> 이라고 합니다.</p>
<blockquote>
<h2 id="의미">의미</h2>
<p>리텐션의 의미는 어떻게 볼 수 있을까요?</p>
</blockquote>
<p>예를 들어봅시다)
<span style = "color : red"><strong>스타벅스가 겨울 프리퀀시</strong></span>를 진행해요 그럼 그 기간이 있습니다. 몇일부터 몇일까지 스탬프를 다 모아야 굿즈를 받을 수 있어요 그 기간동안 이용한 고객 활성화된 유저를 리텐션이라고 합니다.</p>
<blockquote>
<h2 id="특징">특징</h2>
<p>리텐션은 중요한 지표입니다. 단순히 고객이 제품이나 서비스를 계속 사용하는 것을 넘어 <span style = "color : red"><strong>기업의 지속가능성과 연결</strong></span>되기 때문이에요. 제가 생각하는 기업의 고객 수입 프로세스를 한번 보며 이해해봅시다</p>
</blockquote>
<p>① 신생 기업이 탄생하면 고객을 끌어모을 것입니다. <span style = "color : red"><strong>여러 이벤트</strong></span>를 활용해서 모읍니다.
② 모은 고객을 <span style = "color : red"><strong>우리 기업만의 당골</strong></span>로 만들어야 되요 즉, <span style = "color : red"><strong>충성고객</strong></span>으로 만들어야 합니다.
③ 그럼 이 고객들은 계속 우리 기업의 제품만 소비할 것이고 기업은 <span style = "color : red"><strong>안정적인 수익</strong></span>을 갖추게 됩니다.</p>
<blockquote>
</blockquote>
<p>여기서 리텐션은 뭘까요? 
1번에서는 <span style = "color : red"><strong>시작 이벤트 기간동안 참여한 고객</strong></span>이 될 것이고,
2번째에서는 충성고객을 만들기 위해 예를들면 <span style = "color : red"><strong>신세계유니버스 같은 와우회원</strong></span> 같은 것들이 될 수 있겠네요 <span style = "color : red"><strong>멤버십</strong></span>도 저는 리텐션의 한 예라고 생각합니다.</p>
<blockquote>
<h2 id="유저-리텐션-vs-고객-리텐션">유저 리텐션 vs 고객 리텐션</h2>
<p>먼저 유저와 고객은 무슨 특징이 있을까요?</p>
</blockquote>
<ol>
<li>유저 : 우리 제품이나 서비스를 이용하는 사람입니다.</li>
<li>고객 : 우리 제품이나 서비스에 가격을 지불하는 사람을 말해요.<blockquote>
</blockquote>
EX )
이커머스 쿠팡이 있습니다. 쿠팡 앱을 방문하는 사람들 뭐 아이쇼핑을 하면서 앱을 이용하는 사람들을 유저, 직접 그 물건을 장바구니에 담아 구매까지 하는 사람들을 고객이라고 볼 수 있습니다. </li>
</ol>
<blockquote>
<h2 id="유저-리텐션-vs-고객-이탈율">유저 리텐션 vs 고객 이탈율</h2>
<p>이 둘은 큰 상관관계가 있는데, 이탈율은 기업이 고객을 잃는 것을 의미합니다. 그래서 고객을 확보하는 리텐션의 역수를 이탈율이라고 볼 수 있습니다. </p>
</blockquote>
<blockquote>
<h2 id="개선방법">개선방법</h2>
<p>그렇다면 리텐션을 개선하려면 어떻게 해야할까요?</p>
</blockquote>
<h3 id="1-코호트-분석하기">1. 코호트 분석하기</h3>
<p>비용은 한정되어 있는데 항상 이벤트 효과는 최대화 하기를 원합니다. 그래서 코호트 분석을 하는데요. 고객 군집들을 나눠 관리를 해야 보다 효율적인 관리를 할 수 있습니다.</p>
<h3 id="2-유저-피드백-수집">2. 유저 피드백 수집</h3>
<p>매 순간순간마다 고객과 소통하려고 노력하는 것이 브랜드의 핵심이라고 생각하는데요. 제품에 대한 리뷰를 5초에 한번씩 노출하게 한다던지(<del>물론 피로도가 높아질 수 있습니다.</del>) 아니면 고객이 이탈하려 할 때 넷플릭스처럼 왜 멤버십을 해지하는지 묻거나 하는 행위가 중요할 것입니다.</p>
<p>오늘은 이렇게 마케팅 지표 중 2가지 리텐션과 코호트 분석에 대해 알아봤는데요! 오늘도 유익한 글이 되길 바랍니다! 감사합니다~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[머신러닝] k-최근접 이웃 회귀]]></title>
            <link>https://velog.io/@data-marketing/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-k-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83-%ED%9A%8C%EA%B7%80</link>
            <guid>https://velog.io/@data-marketing/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-k-%EC%B5%9C%EA%B7%BC%EC%A0%91-%EC%9D%B4%EC%9B%83-%ED%9A%8C%EA%B7%80</guid>
            <pubDate>Mon, 18 Nov 2024 15:20:51 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 이제 슬슬 머신러닝에 대해 적어보고자 합니다. 여러가지 공부를 하느라 오랜만에 적는 글인데 다시 한번 핵심만 쏙쏙 적어보도록 할게요!</p>
<hr></hr>

<h1 id="1-k-최근접-이웃이란">1. k-최근접 이웃이란?</h1>
<blockquote>
<p>k 최근접 이웃을 알기 전에 우선  <span style = 'color : red'><strong>회귀</strong></span>라는 단어에 대해 알고 넘어가보려고 해요!</p>
</blockquote>
<h2 id="1-1-회귀란">1-1. 회귀란?</h2>
<p>머신러닝에는 대표적인 3가지 학습방법?모델링방법?이 있습니다.
① <strong>지도학습</strong>
② 비지도학습
③ 강화학습
그 중 지도학습에는 두가지가 있습니다. 바로 분류와 회귀입니다.
이 중 우리는 오늘 <strong>회귀에 대해</strong> 알고자 하는데요.</p>
<blockquote>
<h2 id="1-2-회귀의-의미">1-2. 회귀의 의미</h2>
<p>회귀에는 2가지 의미가 있습니다.
<strong>① 회귀란 어떤 임의의 숫자를 예측하는 문제입니다.</strong> 
<strong>② 두 변수간 상관관계를 분석하는 방법</strong>도 회귀의 의미입니다.</p>
</blockquote>
<h1 id="2-k-최근접-알고리즘">2. k-최근접 알고리즘</h1>
<blockquote>
<h2 id="정의">정의</h2>
<p>: k-NN알고리즘이란
<img src="https://velog.velcdn.com/images/data-marketing/post/4909d722-fddb-48af-8e02-dd7cd9a577e7/image.png" alt="">
원형이 짜장 사각형이 짬뽕이라고 생각해봅시다.
위 <strong>별</strong>이 (짜장)인지 (짬뽕)인지 한번 보겠습니다.</p>
</blockquote>
<p>y축은 <span style = 'color : green'><strong>단맛</strong></span> 선호 x축은 <span style = 'color : red'><strong>매운맛</strong></span> 선호라고 봤을 때 단맛을 선호할 수록 <span style = 'color : green'><strong>짜장</strong></span>을 매운맛을 선호할수록 <span style = 'color : red'><strong>짬뽕</strong></span>을 선호한다고 볼 수 있을 것입니다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/05f876d7-f976-49e0-9af3-2ebedd874008/image.png" alt="">
이제 <strong>K-NN알고리즘</strong>을 이용해 인접한 3개의 데이터를 찾아보겠습니다. <span style = 'color : green'><strong>짜장</strong></span> 2개가 묶인 것을 볼 수 있는데요. 그럼 이 별은 짜장이 될 것입니다.</p>
</blockquote>
<p>하지만 4개일 때는 어떨까요?<img src="https://velog.velcdn.com/images/data-marketing/post/dcde11a1-e0d0-468c-ad4b-bce658c6d432/image.png" alt="">
4개일 때는 뭐가 뭔지 모르겠습니다. 짜장일수도 있고 짬뽕일 수도 있어요. 이와 같이 k를 설정해 거리 기준 인접한 분류형태가 되는 것이 K-NN입니다.</p>
<h3 id="2-1-장점--단점">2-1. 장점 / 단점</h3>
<p><span style = 'color : green'><strong>장점</strong></span>
① 단순하고 효율적이다
② 훈련이 빠르고 수치기반 데이터에서 성능이 우수하다.</p>
<blockquote>
</blockquote>
<p><span style = 'color : RED'><strong>단점</strong></span>
① 적절한 K의 선택이 필요하다(중복되면 애매해질 수 있다.)
② 데이터가 많을 수록 분류 단계가 느리다.</p>
<h1 id="3k-nn회귀는">3.K-NN회귀는?</h1>
<blockquote>
<p>바로 x를 활용해 y를 예측하는 것입니다. 
해당 k-최근접 이웃 알고리즘을 사용해 회귀 문제를 푸는데요, 
가장 가까운 이웃 샘플을 찾고 이 샘들들의 타깃값을 평균하여 예측으로 삼는 것이 K-NN회귀입니다.</p>
</blockquote>
<h3 id="예시">예시</h3>
<pre><code>perch_length = np.array([8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0,
       21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7,
       23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27.5, 27.5,
       27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0, 36.5, 36.0, 37.0, 37.0,
       39.0, 39.0, 39.0, 40.0, 40.0, 40.0, 40.0, 42.0, 43.0, 43.0, 43.5,
       44.0])
perch_weight = np.array([5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, 110.0,
       115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, 130.0,
       150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, 197.0,
       218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, 514.0,
       556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, 820.0,
       850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0,
       1000.0])</code></pre><p>다음과 같이 농어의 무게와 크기가 있을 때 회귀모델을 활용할 수 있습니다.</p>
<blockquote>
</blockquote>
<p>이 데이터들을 통해 모델을 학습시킵니다.
코드는 아래와 같습니다.</p>
<pre><code>from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(perch_length, perch_weight, random_state=42)

train_input = train_input.reshape(-1,1)
test_input = test_input.reshape(-1,1)
print(train_input.shape, test_input.shape)

from sklearn.neighbors import KNeighborsRegressor

knr = KNeighborsRegressor()
knr.fit(train_input, train_target)

from sklearn.metrics import mean_absolute_error

test_prediction = knr.predict(test_input)

mae = mean_absolute_error(test_target, test_prediction)
mae</code></pre><p>무게와 길이에 따른 농어 예측입니다. 이 같은 모델을 회귀모델이라고 합니다.</p>
<p>오늘은 k-nn회귀에 대해 알아봤습니다!
읽어주셔서 감사합니다~!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[통계기초] z-score(z-점수, 정규화)?]]></title>
            <link>https://velog.io/@data-marketing/%ED%86%B5%EA%B3%84%EA%B8%B0%EC%B4%88-z-score</link>
            <guid>https://velog.io/@data-marketing/%ED%86%B5%EA%B3%84%EA%B8%B0%EC%B4%88-z-score</guid>
            <pubDate>Sun, 27 Oct 2024 02:46:55 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 오늘은 통계 기초에 대해 말해보고자 합니다.^^
통계에도 평균, 표준편차, 분산 등등이 있으나 이번에는 z-score 정규화에 대해 말해보고자 해요! 가장 중요한거 같더라구요!
그럼 한번 알아봅시다.</p>
<hr></hr>

<h1 id="1-z-score란">1. z-score란?</h1>
<blockquote>
<h2 id="1-1-정의"><strong>1-1. 정의</strong></h2>
<p>z-score란 어떤 데이터 포인트가 <span style = 'color : red'><strong>그 데이터 집합의 평균으로부터 표준편차의 몇 배만큼 떨어져 있는지</strong></span>를 나타냅니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/bf0446e7-960f-4a37-acab-9361e250d53f/image.png" alt="">
X: 관찰 값
μ: 전체 데이터의 평균
σ: 전체 데이터의 표준 편차</p>
</blockquote>
<blockquote>
</blockquote>
<p>예시를 들어 분모 분자에 대해 알아볼게요!</p>
<blockquote>
</blockquote>
<p>우리가 한 반의 시험 점수에 대해 분석한다고 가정해봅시다.</p>
<h3 id="1-1-1-z-score가-높다는-것은"><strong>1-1-1. z-score가 높다는 것은?</strong></h3>
<p><span style = 'color : green'>분자의 관점</span>에서 <strong>내가 시험점수를 잘 맞으면</strong> z-score가 높아지고 시험이 어려워서 <strong>평균이 낮아지는 것</strong>도 z-score가 높아진다고 볼 수 있습니다.</p>
<blockquote>
<p><span style = 'color : green'>분모의 관점</span>에서는 <strong>표준편차가 작을수록 z-score가 크겠죠</strong>?
그리고 z-score가 낮아진다는 것은 반대라고 볼 수 있습니다.</p>
<hr></hr>
자 그러면 하나씩 알아볼게요!

</blockquote>
<p>먼저 <span style = 'color : green'><strong>분자</strong></span>입니다. <strong>분자</strong>는 (원점수 - 평균)으로 이뤄져 있습니다. 시험을 잘 보려면? 내 점수가 높거나 평균이 낮으면 z-score가 올라가겠죠?</p>
<blockquote>
</blockquote>
<p>그러면 이번에는 <span style = 'color : green'><strong>분모</strong></span>에 대해 보겠습니다. 분모는 <strong>&#39;표준편차&#39;</strong>입니다.
<strong>표준편차는 작아질수록</strong> z-score가 커진다고 볼 수 있겠네요.</p>
<blockquote>
</blockquote>
<p>표준편차란 <strong>내 점수가 우리 반 애들 평균으로 부터 얼마나 떨어져 있는지 보는 지표</strong>입니다. <strong>작을수록 점수가 오밀조밀</strong> 붙어 있음을 알 수 있고 <strong>클수록 실력차이가 크다</strong>고 볼 수 있습니다.</p>
<blockquote>
</blockquote>
<h2 id="1-2-의미">1-2. 의미</h2>
<ul>
<li>z-score = 0이면 평균과 동일하다.</li>
<li>z-score &gt; 0 해당 데이터는 평균보다 n만큼 크다.</li>
<li>z-score &lt; 0 해당 데이터는 평균보다 n만큼 작다.
즉, <strong>z-score는 데이터 포인트가 평균에 비해 얼마나 &#39;표준적&#39;이거나 &#39;비표준적&#39;</strong>인지 알려줍니다.</li>
</ul>
<hr></hr>

<h1 id="2-정규화">2. 정규화?</h1>
<p>우리가 저번에 알아봤던 정규화는 <a href="https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81-%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CNormalization">normalization</a>이고 이 정규화는 조금 성격이 다릅니다. 그럼 차이점에 대해 알아보겠습니다.</p>
<h2 id="2-1-z-score와-normalization의-차이">2-1. z-score와 normalization의 차이</h2>
<blockquote>
</blockquote>
<h3 id="2-1-1-z-score">2-1-1. z-score</h3>
<blockquote>
<ul>
<li><strong>목적</strong> 
z-score의 목적은 얼마나 데이터가 표준적인지 비표준적인지 나타내며, 데이터가 정규분포를 따를 때 더욱 유용하게 활용됩니다.</li>
</ul>
</blockquote>
<ul>
<li><strong>언제 활용</strong>
이상치 탐지, 통계적 추론 등</li>
</ul>
<h3 id="2-1-2-normalization">2-1-2. normalization</h3>
<blockquote>
</blockquote>
<ul>
<li><strong>목적</strong></li>
<li><em>minmax scaling*</em>으로도 본 이것은 데이터를 0~1사이 값으로 스케일링을 맞춰준다는 개념으로 데이터를 균일하게 맞춰주는 역할을 합니다. 또한 이 정규화는 분포에 영향을 받지 않습니다.</li>
<li><strong>언제 활용</strong>
머신러닝 모델 학습, 여러 데이터를 하나로 쓰고 싶을 때</li>
</ul>
<h2 id="2-2-차이점">2-2. 차이점</h2>
<blockquote>
<ul>
<li><strong>범위</strong> : z-score의 경우 ±표준편차 만큼 벌어집니다. 반면, minmax scaler의 경우 0~1의 범위로 줄어듭니다.</li>
</ul>
</blockquote>
<ul>
<li><strong>분포특징</strong> : z-score는 정규분포를 좋아하는 반면, minmax는 분포에 상관없이 활용가능합니다.</li>
<li><strong>수식</strong> : z-score는 평균과 표준편차를 활용하고 minmax는 데이터의 최대 최소 값을 활용합니다.</li>
</ul>
<hr></hr>

<h1 id="3-표준화">3. 표준화?</h1>
<p>우리가 저번에 알아봤던 <a href="https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CMinMax-Standard-Robust">표준화</a>와는 뭐가 다를까? 그럼 차이점에 대해 알아보겠습니다.</p>
<h2 id="3-1-z-score와-표준화의-차이">3-1. z-score와 표준화의 차이</h2>
<blockquote>
</blockquote>
<h3 id="3-1-1-z-score">3-1-1. z-score</h3>
<blockquote>
<ul>
<li><strong>특징</strong> 
z-score는 각각의 개별 데이터가 전체 평균으로 표준편차의 몇 배만큼 떨어져 있는지를 봅니다.</li>
</ul>
</blockquote>
<ul>
<li><strong>언제 활용</strong>
이상치 탐지, 통계적 추론 등</li>
</ul>
<h3 id="3-1-2-표준화">3-1-2. 표준화</h3>
<blockquote>
</blockquote>
<ul>
<li><strong>특징</strong>
수식은 z-score와 같지만, 평균이 0, 표준편차를 1에 전체 데이터를 맞춥니다. 실제로 표준화 과정에서 각 데이터 포인트를 해당 데이터 집합의 Z-점수로 변환합니다.</li>
<li><strong>언제 활용</strong>
머신러닝 모델 학습, 여러 데이터를 하나로 쓰고 싶을 때</li>
</ul>
<h2 id="3-2-차이점">3-2. 차이점</h2>
<blockquote>
<ul>
<li><strong>범위</strong> : z-score의 경우 개별 데이터를 활용하는반면, 표준하는 평균 : 0, 표준편차 : 1에 전체 데이터를 맞춥니다.</li>
</ul>
</blockquote>
<ul>
<li><strong>활용특징</strong> : z-score는 주로 이상치 탐지에 활용하고, 표준화는 스케일링에서 활용합니다.</li>
</ul>
<hr></hr>
여기까지 z-score에 대해 알아보았습니다. 다음번에는 이를 활용해 이상치를 탐지해보는 예제를 보도록 할게요! 오늘도 읽어주셔서 감사합니다~
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기, 진료과별 총 예약 횟수 출력하기 -(프로그래머스 문제풀이 SQL고득점KIT)]]></title>
            <link>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%EC%A2%85%EB%A5%98-%EB%B3%84-%ED%8A%B9%EC%A0%95-%EC%98%B5%EC%85%98%EC%9D%B4-%ED%8F%AC%ED%95%A8%EB%90%9C-%EC%9E%90%EB%8F%99%EC%B0%A8-%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</link>
            <guid>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%EC%A2%85%EB%A5%98-%EB%B3%84-%ED%8A%B9%EC%A0%95-%EC%98%B5%EC%85%98%EC%9D%B4-%ED%8F%AC%ED%95%A8%EB%90%9C-%EC%9E%90%EB%8F%99%EC%B0%A8-%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</guid>
            <pubDate>Tue, 22 Oct 2024 17:34:24 GMT</pubDate>
            <description><![CDATA[<p>이번에는 SQL문제 3탄으로 돌아왔습니다. SQL기초 문제 중 문법적으로 알아보면 좋을 문제 2문제 알아보고 가겠습니다.</p>
<hr></hr>

<h1 id="1-자동차-종류-별-특정-옵션이-포함된-자동차-수-구하기">1. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기</h1>
<blockquote>
<p><a href="tps://school.programmers.co.kr/learn/courses/30/lessons/151137?language=mysql">문제</a></p>
</blockquote>
<h2 id="문제설명">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : CAR_RENTAL_COMPANY_CAR</li>
<li><strong>COLUMN</strong> : CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>CAR_ID</center></th>
<th>CAR_TYPE</th>
<th align="center">DAILY_FEE</th>
<th align="right"><center>OPTIONS</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">1</td>
<td>세단</td>
<td align="center">16000</td>
<td align="right">가죽시트,열선시트,후방카메라</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2</td>
<td>SUV</td>
<td align="center">14000</td>
<td align="right">스마트키,네비게이션,열선시트</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">- <strong>문제</strong> :</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1. CAR_RENTAL_COMPANY_CAR 테이블에서 <strong>&#39;통풍시트&#39;, &#39;열선시트&#39;, &#39;가죽시트&#39; 중 하나 이상의 옵션이 포함된 자동차</strong>가</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2. <strong>자동차 종류 별</strong>로 <strong>몇 대</strong>인지 출력</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">3. 이때 <strong>자동차 수에 대한 컬럼명은 CARS로</strong> 지정</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">4. 결과는 <strong>자동차 종류를 기준으로 오름차순 정렬</strong></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<ul>
<li><strong>풀이문법</strong> : </li>
</ul>
<ol>
<li><blockquote>
<h3 id="풀이과정">풀이과정</h3>
<p>이번 문제는 정말 쉽기보다 처음에는 조금 헤맸습니다. WHERE문을 써야하나? GROUP BY에는 HAVING을 써야하나? 싶더라고요? 그럼 어떻게 문제를 풀어나갔는지 한번 보겠습니다.</p>
<HR></HR>
일단 예시 결과는 다음과 같습니다.

</blockquote>
<pre><code>CAR_TYPE    CARS
SUV            2
세단            1
트럭            1</code></pre><p>자 그러면 SELECT 문으로 CAR_TYPE과 CARS를 출력해야합니다.
SELECT CAR_TYPE, CARS로 시작해야겠죠? 여기서 2번과 3번 풀이과정이 쓰여야합니다. 집계함수를 활용하라 했기에</p>
</li>
</ol>
<p><strong>SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS</strong>로 해줍니다.
<span style = 'color : red'><strong>CAR_TYPE별로 계산을 하는데 이것을 출력시 CARS로 해주겠다는 것입니다.</strong></span>
그 다음은 GROUP BY입니다. 자동차 종류 별로라고 했기 때문에 CAR_TYPE별 개수를 구해줘야합니다. 따라서
<strong>GROUP BY CAR_TYPE으로 해주고 자동차 종류 기준 오름차순이므로 ORDER BY CAR_TYPE ASC;</strong>로 끝내줍니다.</p>
<blockquote>
</blockquote>
<p>사실 여기까지는 이전에서 본것과 크게 다를 부분이 없습니다.</p>
<blockquote>
</blockquote>
<p>그럼 이 문제에서 얻어갈 것은 무엇일까요? 바로 <strong>LIKE</strong>활용입니다.
한글로 나오는 옵션에 대해 통풍시트라고 했으므로 LIKE를 활용합니다.</p>
<blockquote>
</blockquote>
<p><span style = 'color : red'><strong>LIKE는 문자열의 부분옵션일치를 탐색하는 구문</strong></span>이기 때문에 해당 문제에서 활용할 수 있습니다. 그리고 <span style = 'color : red'><strong>&#39;통풍시트&#39;, &#39;열선시트&#39;, &#39;가죽시트&#39; 중 하나 이기 때문에 OR구문을 활용합니다.</strong></span>
따라서 결과는!</p>
<pre><code>SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE &#39;%통풍시트%&#39;OR
    OPTIONS LIKE &#39;%열선시트%&#39; OR
    OPTIONS LIKE &#39;%가죽시트%&#39;
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;</code></pre><p>다음과 같이 구할 수 있습니다</p>
<hr></hr>

<h1 id="2-진료과별-총-예약-횟수-출력하기">2. 진료과별 총 예약 횟수 출력하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/132202?language=mysql">문제</a></p>
</blockquote>
<h2 id="문제설명-1">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : APPOINTMENT</li>
<li><strong>COLUMN</strong> : APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_CNCL_YN, APNT_CNCL_YMD</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>APNT_YMD</center></th>
<th>APNT_NO</th>
<th align="center">PT_NO</th>
<th align="center"><center>MCDP_CD</center></th>
<th align="center">MDDR_ID</th>
<th align="center">APNT_CNCL_YN</th>
<th align="right">APNT_CNCL_YMD</th>
</tr>
</thead>
<tbody><tr>
<td align="left">2022-04-14 09:30:00.000000</td>
<td>47</td>
<td align="center">PT22000064</td>
<td align="center">GS</td>
<td align="center">DR20170123</td>
<td align="center">N</td>
<td align="right">NULL</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2022-04-15 10:30:00.000000</td>
<td>48</td>
<td align="center">PT22000065</td>
<td align="center">OB</td>
<td align="center">DR20100231</td>
<td align="center">N</td>
<td align="right">NULL</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">- <strong>문제</strong> :</td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1. <strong>2022년 5월에 예약</strong>한 환자 수를 <strong>진료과코드 별로 조회</strong></td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2. <strong>컬럼명은 &#39;진료과 코드&#39;, &#39;5월예약건수&#39;</strong>로 지정</td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">3. 결과는 <strong>진료과별 예약한 환자 수</strong>를 기준으로 <strong>오름차순 정렬</strong></td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">4. <strong>예약한 환자 수가 같다</strong>면 <strong>진료과 코드를 기준으로 오름차순 정렬</strong></td>
<td></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<ul>
<li><strong>풀이문법</strong> : </li>
</ul>
<ol>
<li><strong>WHERE</strong> 코드별 : <strong>GROUP BY</strong></li>
<li>00로 지정 : <strong>AS</strong>
3, 4. 정렬 : <strong>ORDER BY</strong></li>
</ol>
<blockquote>
<h3 id="풀이과정-1">풀이과정</h3>
</blockquote>
<pre><code>SELECT MCDP_CD AS &#39;진료과 코드&#39;, COUNT(MCDP_CD) AS &#39;5월예약건수&#39;
FROM APPOINTMENT
WHERE APNT_YMD &gt;= &#39;2022-05-01 00:00:00.000000&#39; 
        AND APNT_YMD &lt; &#39;2022-06-01 0:00:00.000000&#39;
GROUP BY MCDP_CD
ORDER BY COUNT(MCDP_CD) ASC, MCDP_CD ASC;</code></pre><p>2022년 5월 예약환자를 진료 하는 것이므로 <strong>WHERE APNT_YMD &gt;= &#39;&#39;APNT_YMD</strong>의 형태를 따라가도록 했습니다. 5월 기준이므로 <strong>5월 1일부터 6월 1일 전까지</strong>라는 의미의 <strong>WHERE</strong>절을 만들어주고</p>
<blockquote>
</blockquote>
<p>컬럼명은 <strong>AS</strong>를 활용해줍니다. 특히 <strong>진료과 코드별~</strong> 이라고 했으므로
<strong>진료과 코드별로 GROUP BY</strong>를 활용해 묶어주면 코드를 완성할 수 있습니다.</p>
<p>오늘은 이렇게 2문제를 풀었습니다. 이제 2단계를 풀고 있는데 4단계는 푸는 그 날까지 열심히 나아가고자 합니다! 감사합니다~!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 강원도에 위치한 생산공장 목록 출력하기, 중복 제거하기-(프로그래머스 문제풀이 SQL고득점KIT)]]></title>
            <link>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B0%95%EC%9B%90%EB%8F%84%EC%97%90-%EC%9C%84%EC%B9%98%ED%95%9C-%EC%83%9D%EC%82%B0%EA%B3%B5%EC%9E%A5-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</link>
            <guid>https://velog.io/@data-marketing/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B0%95%EC%9B%90%EB%8F%84%EC%97%90-%EC%9C%84%EC%B9%98%ED%95%9C-%EC%83%9D%EC%82%B0%EA%B3%B5%EC%9E%A5-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</guid>
            <pubDate>Fri, 18 Oct 2024 15:47:34 GMT</pubDate>
            <description><![CDATA[<p>이번에도 SQL문제 2탄으로 돌아왔습니다. SQL기초 문제 중 문법적으로 알아보면 좋을 문제 2문제 알아보고 가겠습니다.</p>
<hr></hr>

<h1 id="1-강원도에-위치한-생산공장-목록-출력하기">1. 강원도에 위치한 생산공장 목록 출력하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/131112?language=mysql">문제</a></p>
</blockquote>
<h2 id="문제설명">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : FOOD_FACTORY</li>
<li><strong>COLUMN</strong> : FACTORY_ID, FACTORY_NAME, ADDRESS, TLNO</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>FACTORY_ID</center></th>
<th>FACTORY_NAME</th>
<th align="center">ADDRESS</th>
<th align="right"><center>TLNO</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">FT19980003</td>
<td>(주)맛있는라면</td>
<td align="center">강원도 정선군 남면 칠현로 679</td>
<td align="right">033-431-3122</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">FT19980004</td>
<td>(주)맛있는기름</td>
<td align="center">경기도 평택시 포승읍 포승공단순환로 245</td>
<td align="right">031-651-2410</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">- <strong>문제</strong> :</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1. FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2. 결과는 공장 ID를 기준으로 오름차순</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<ul>
<li><strong>풀이문법</strong> : </li>
</ul>
<ol>
<li><strong>SELECT</strong> FACTORY_ID, FACTORY_NAME, ADDRESS</li>
<li><strong>WHERE</strong> FACTORY_ID</li>
<li><strong>강원도에 위치한</strong>을 어떻게 처리할지?</li>
</ol>
<blockquote>
<h3 id="풀이과정">풀이과정</h3>
<p>일단 정말 쉽습니다. 하지만 주의할점이 있습니다. 바로 <span style = 'color : red'><strong>강원도에 위치한</strong></span>인데요 그렇다면 다음과 같이 해야할까요?</p>
</blockquote>
<pre><code>SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS = &#39;강원도&#39;
ORDER BY FACTORY_ID asc;</code></pre><p>안됩니다. 해당 쿼리는 ADDRESS가 &#39;강원도&#39;인 지역 즉, &#39;강원도&#39; 이 3글자인 ADDRESS를 출력하는 것입니다.
우리가 푸는 문제는 강원도에 위치한 공장이므로 문법 <strong>LIKE</strong>를 사용합니다. LIKE A%는 A로 시작하는 단어를 출력할 때 사용하는 문법이며 그래서 결과는 아래와 같습니다.</p>
<pre><code>SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE &#39;강원도%&#39;
ORDER BY FACTORY_ID asc;</code></pre><h1 id="2-중복-제거하기">2. 중복 제거하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/59408?language=mysql">문제</a></p>
</blockquote>
<h2 id="문제설명-1">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : ANIMAL_INS</li>
<li><strong>COLUMN</strong> : ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="center">ANIMAL_ID</th>
<th align="center">ANIMAL_TYPE</th>
<th align="center">DATETIME</th>
<th align="center">INTAKE_CONDITION</th>
<th align="center">NAME</th>
<th align="center">SEX_UPON_INTAKE</th>
</tr>
</thead>
<tbody><tr>
<td align="center">A562649</td>
<td align="center">Dog</td>
<td align="center">2014-03-20 18:06:00</td>
<td align="center">Sick</td>
<td align="center">NULL</td>
<td align="center">Spayed Female</td>
</tr>
<tr>
<td align="center"></td>
<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">A412626</td>
<td align="center">Dog</td>
<td align="center">2016-03-13 11:17:00</td>
<td align="center">Normal</td>
<td align="center">*Sam</td>
<td align="center">Neutered Male</td>
</tr>
</tbody></table>
<ul>
<li><strong>문제</strong> : </li>
</ul>
<ol>
<li>동물 보호소에 들어온 동물의 이름은 몇 개인지 조회</li>
<li>이름이 NULL인 경우는 집계하지 않으며</li>
<li>중복되는 이름은 하나</li>
</ol>
<ul>
<li><strong>풀이문법</strong> : </li>
</ul>
<ol>
<li><strong>COUNT</strong></li>
<li><strong>IS NOT NULL</strong></li>
<li><strong>DISTINCT</strong></li>
</ol>
<blockquote>
<h3 id="풀이과정-1">풀이과정</h3>
<p>일단 결과를 보고 설명드리겠습니다.</p>
</blockquote>
<pre><code>SELECT COUNT(DISTINCT NAME) as COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL</code></pre><ol>
<li><strong>COUNT</strong> : 집계함수로서 NAME의 개수를 집계합니다. 몇개인지 조회이므로 사용합니다. 그리고 원하는 결과가 COUNT열로 나와야 하므로 집계한 열을 <strong>AS COUNT</strong>라고 이름지어줍니다.</li>
<li>이름이 NULL인 경우는 집계하지 않습니다. 즉, IS NOT NULL을 사용합니다. <strong>NAME IS NOT NULL</strong>을 WHERE절에 사용합니다.</li>
<li>중복은 <strong>DISTINCT</strong>라는 문법을 사용하며 이는 SELECT문에 넣어 활용합니다.</li>
</ol>
<p>오늘은 LEVEL1 2문제에 대한 풀이를 남겼는데요. 봐야할 함수 목록 잘 보고 가져가시기 바랍니다~~ 감사합니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 평균일일대여요금구하기, 재구매가 일어난 상품과 회원 리스트 구하기-(프로그래머스 문제풀이 SQL고득점KIT)]]></title>
            <link>https://velog.io/@data-marketing/SQL-%EA%B3%B5%EB%B6%80-%ED%8F%89%EA%B7%A0%EC%9D%BC%EC%9D%BC%EB%8C%80%EC%97%AC%EC%9A%94%EA%B8%88%EA%B5%AC%ED%95%98%EA%B8%B0-%EC%9E%AC%EA%B5%AC%EB%A7%A4%EA%B0%80-%EC%9D%BC%EC%96%B4%EB%82%9C-%EC%83%81%ED%92%88%EA%B3%BC-%ED%9A%8C%EC%9B%90-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</link>
            <guid>https://velog.io/@data-marketing/SQL-%EA%B3%B5%EB%B6%80-%ED%8F%89%EA%B7%A0%EC%9D%BC%EC%9D%BC%EB%8C%80%EC%97%AC%EC%9A%94%EA%B8%88%EA%B5%AC%ED%95%98%EA%B8%B0-%EC%9E%AC%EA%B5%AC%EB%A7%A4%EA%B0%80-%EC%9D%BC%EC%96%B4%EB%82%9C-%EC%83%81%ED%92%88%EA%B3%BC-%ED%9A%8C%EC%9B%90-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-SQL%EA%B3%A0%EB%93%9D%EC%A0%90KIT</guid>
            <pubDate>Thu, 17 Oct 2024 06:12:48 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요 데이터분석의 기초 중 하나인 SQL문을 요즘 다시 공부하고 있습니다. SQLD도 따야하니 문제 풀이도 열심히 해야하는데요! 오늘은 제가 늘 푸는 <strong>프로그래머스의 SQL문제</strong> 몇 개 정도 풀어보고 코드를 적어보겠습니다.
<HR></HR></p>
<h1 id="1-평균일일대여요금구하기">1. 평균일일대여요금구하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/151136">문제</a></p>
</blockquote>
<h2 id="문제설명">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : CAR_RENTAL_COMPANY_CAR</li>
<li><strong>COLUMN</strong> : CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="left"><center>CAR_ID</center></th>
<th>CAR_TYPE</th>
<th align="center">DAILY_FEE</th>
<th align="right"><center>OPTIONS</center></th>
</tr>
</thead>
<tbody><tr>
<td align="left">1</td>
<td>세단</td>
<td align="center">16000</td>
<td align="right">가죽시트,열선시트,후방카메라</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2</td>
<td>SUV</td>
<td align="center">14000</td>
<td align="right">스마트키,네비게이션,열선시트</td>
</tr>
<tr>
<td align="left"></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left"><strong>OPTIONS 열은 리스트 형태</strong>로 되어있습니다.</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">- <strong>문제</strong> :</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1. 자동차 종류가 &#39;SUV&#39;인 자동차들의 평균 일일 대여 요금을 출력</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2. 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">3. 자동차들의 평균 일일 대여 요금, 컬럼명은 AVERAGE_FEE 로 지정</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">- <strong>풀이문법</strong> :</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">1. <strong>WHERE</strong> CAR_TYPE = &#39;SUV&#39;</td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">2. <strong>ROUND(&#39;값&#39;, &#39;자리수&#39;)</strong></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">3. <strong>AVG()</strong>활용, <strong>AS &#39;&#39;활용</strong></td>
<td></td>
<td align="center"></td>
<td align="right"></td>
</tr>
</tbody></table>
<blockquote>
<h3 id="풀이과정">풀이과정</h3>
</blockquote>
<h4 id="주의">주의</h4>
<pre><code>SELECT ROUND(AVG(DAILY_FEE) &#39;AVGERAGE_FEE&#39;, 1)
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = &#39;SUV&#39;</code></pre><blockquote>
<p>이문법은 오류가 발생합니다 왜일까요? 바로 <strong>ROUND함수의 활용</strong>입니다. AVERAGE_FEE를 결과에 명시하기 위해 이렇게 출력을 하게 되면 오류가 나는데요 이때는 <span style = "color : red"><strong>AVERAGE_FEE를 명시하기 위해 AS 구문</strong></span>을 사용해야합니다.</p>
</blockquote>
<pre><code>SELECT ROUND(AVG(DAILY_FEE), 1) AS &#39;AVERAGEE_FEE&#39;
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = &#39;SUV&#39;</code></pre><pre><code>AVERAGEE_FEE
93727.3</code></pre><p>라는 결과가 나옵니다. 하지만 ROUND함수에서 또 다른 주의점은 <strong>자릿수 1이 1자릿수까지 결과가 나온다.</strong> 라는 의미라는 점입니다.</p>
<h3 id="결과">결과</h3>
<pre><code>SELECT ROUND(AVG(DAILY_FEE)) AS &#39;AVERAGEE_FEE&#39;
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = &#39;SUV&#39;</code></pre><pre><code>AVERAGEE_FEE
93727</code></pre><p>이렇게 나오면 됩니다!</p>
<hr></hr>

<h1 id="2-재구매가-일어난-상품과-회원-리스트-구하기">2. 재구매가 일어난 상품과 회원 리스트 구하기</h1>
<blockquote>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/131536">문제</a></p>
</blockquote>
<h2 id="문제설명-1">문제설명</h2>
<ul>
<li><strong>TABLE</strong> : ONLINE_SALE</li>
<li><strong>COLUMN</strong> : ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE</li>
<li><strong>테이블 생김새</strong> : </li>
</ul>
<table>
<thead>
<tr>
<th align="center">ONLINE_SALE_ID</th>
<th align="center">USER_ID</th>
<th align="center">PRODUCT_ID</th>
<th align="center">SALES_AMOUNT</th>
<th align="center">SALES_DATE</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1</td>
<td align="center">1</td>
<td align="center">2</td>
<td align="center">300</td>
<td align="center">2024-10-16</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">1</td>
<td align="center">1</td>
<td align="center">400</td>
<td align="center">2024-10-17</td>
</tr>
</tbody></table>
<p>USER_ID 가 1인 유저가 PRODUCT_ID 가 3, 4인 상품들을 재구매하고, USER_ID 가 2인 유저가 PRODUCT_ID 가 4인 상품을 재구매</p>
<ul>
<li><strong>문제</strong> : </li>
</ul>
<ol>
<li>ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하기</li>
<li>재구매한 회원 ID와 재구매한 상품 ID를 출력</li>
<li>결과는 회원 ID를 기준으로 오름차순 정렬</li>
<li>회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬</li>
</ol>
<ul>
<li><strong>풀이문법</strong> : </li>
</ul>
<ol>
<li><strong>HAVING</strong></li>
<li><strong>SELECT</strong> USER_ID, PRODUCT_ID</li>
<li><strong>ORDER BY</strong> USER_ID ASC</li>
<li><strong>ORDER BY</strong> USER_ID <strong>ASC</strong> PRODUCT_ID <strong>DESC</strong></li>
</ol>
<blockquote>
<h3 id="풀이과정-1">풀이과정</h3>
</blockquote>
<pre><code>SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE 
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) &gt;= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC</code></pre><pre><code>USER_ID    PRODUCT_ID
15    12
119    12</code></pre><p>일단 결과는 이렇습니다. 그러면 코드 한줄씩 알아볼게요!</p>
<blockquote>
</blockquote>
<p>① SELECT 문이 나온다? 그러면 일단 <strong>SELECT FROM WHERE</strong>를 씁니다. WHERE를 현재 문제에서는 안 썼지만 그냥 써놓고 지우면 돼요^^ 이 문제는 USER_ID와 PRODUCT_ID를 출력하는 것이기 때문에 <strong>SELECT USER_ID, PRODUCT_ID</strong>를 SELECT문에 적습니다.</p>
<blockquote>
</blockquote>
<p>② <strong>GROUP BY</strong>문을 사용했습니다. GROUP BY는 열 이름이 와야하며 우리는 USER_ID가 PRODUCT_ID를 재구매 한 사람을 출력하고 싶습니다. 때문에 이 둘을 GROUP BY해줍니다.
만약 <strong>USER_ID만 GROUP BY</strong> 해주면 어떻게 될까요?
USER_ID별 PRODUCT_ID가 출력될 것입니다.</p>
<pre><code>USER_ID    PRODUCT_ID
2    21
7    1
15    12</code></pre><p>다음과 같이 말이죠. <strong>2번 USER가 21번 PRODUCT를 재구매</strong> 했다는 의미입니다. <strong>즉, 각 사용자가 얼마나 많은 구매를 했는지에 대한 총합입니다.</strong> 
하지만 <strong>USER_ID와 PRODUCT_ID를 동시에 GROUP BY</strong> 해주게 되면 각 사용자별로 특정 제품을 몇 번 구매했는지를 집계해줍니다. <strong>즉, 사용자가 각 제품을 구매한 횟수를 각각 집계하여 반환합니다.</strong></p>
<pre><code>USER_ID    PRODUCT_ID
15    12
119    12</code></pre><blockquote>
</blockquote>
<p>③ <strong>HAVING COUNT(*) &gt;= 2</strong>는 GROUP BY한 GROUP이 2번 이상 발생하면 출력입니다. 즉, 재구매 이므로 다음과 같은 쿼리를 작성했습니다.</p>
<blockquote>
</blockquote>
<p>④ 회원 ID가 같다면 상품 ID를 기준으로 내림차순 <strong>정렬</strong>, 정렬은 <strong>ORDER BY</strong> 구문을 사용합니다. 먼저 USER_ID로 ASC를 한 뒤 이가 같으면 PRODUCT_ID로 내림차순이므로 <strong>ORDER_BY USER_ID ASC, PRODUCT_ID DESC</strong>로 적습니다. 항상 <strong>&#39;컬럼1 다음 오는 컬럼2는 컬럼1이 같을경우 컬럼2는 이렇다&#39;</strong>로 이해해주시면 될 것 같습니다.</p>
<p>오늘은 이렇게 2문제에 대해 리뷰를 남깁니다.
오늘도 읽어주셔서 감사합니다~!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터분석의 기초] 선형대수 3탄 - 행렬의 기초 역행렬과 행렬식!]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-3%ED%83%84-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%97%AD%ED%96%89%EB%A0%AC%EA%B3%BC-%ED%96%89%EB%A0%AC%EC%8B%9D</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-3%ED%83%84-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%97%AD%ED%96%89%EB%A0%AC%EA%B3%BC-%ED%96%89%EB%A0%AC%EC%8B%9D</guid>
            <pubDate>Tue, 15 Oct 2024 10:13:37 GMT</pubDate>
            <description><![CDATA[<p>이번에는 지난 행렬에 관한 기초에 이어 약간 중급개념?으로 넘어가볼까합니다. 안 보신 분들은 다음 링크로 접속 후 들어와주셔야 해요~^^
<a href="https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-2%ED%83%84-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C">링크텍스트</a></p>
<hr></hr>

<h2 id="행렬식">행렬식</h2>
<blockquote>
<h3 id="정의">정의</h3>
<p>행렬이 갖고 있는 양을 뜻합니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/daec1bb3-82f6-45e3-bcdb-5a98b9a82d5f/image.png" alt="">
정방행렬이여야만 하는 조건이 있습니다.
또한 이 수식은 <strong>ad-bc</strong>인데요~!</p>
</blockquote>
<h3 id="계산식">계산식</h3>
<p>조금 더 이해가 쉽게 계산식을 보겠습니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/13ca19a4-00e8-4843-9086-c2b9e9dfb9fc/image.png" alt="">
B벡터가 3*3으로 정방행렬 형태를 띄고 있으며 det(B)를 구하기 위해 다음과 같은 계산식이 들어가네요</p>
<h3 id="-1은-왜-곱할까">-1은 왜 곱할까?</h3>
<p>-1을 곱하는 부분 다들 궁금하시죠? 간단하게 짚고 넘어가겠습니다.
<strong>이유</strong> : 행렬식 계산 과정에서 교환에 의한 부호 변화인데 이는 여인자 전개 방식에서 등장한다고 합니다. 그럼 여인자 전개방식이 뭘까요?
<strong>여인자 전개방식</strong> : NxN행렬식을 더 작은 (n-1)x(n-1)행렬들의 행렬식으로 표현하는 것입니다. 이 과정에서 특정 행 또는 열을 기준으로 전개할 때 부호패턴을 맞추기 위해 (−1)^i+j과 같은 부호를 사용합니다. 여기서 i와 j는 원소의 행과 열입니다. 그래서 3x3행렬을 계산할 때 다음과 같은 부호 행렬을 사용합니다.<img src="https://velog.velcdn.com/images/data-marketing/post/32fa3d1d-e8a7-4dbf-b646-abffcf6b7a98/image.png" alt="">
행과 열 번호의 합이 짝수일 때는 양수, 홀수일 때는 음수가 되도록
(−1)을 제곱하는 것입니다.</p>
<h2 id="평행사변형의-넓이">평행사변형의 넓이</h2>
<p>앞에서 <span style ="color : red">행렬식은 결국 <strong>행렬의 부피의 크기(volume)</strong></span>을 의미하는데요.
<img src="https://velog.velcdn.com/images/data-marketing/post/a25d40d5-5928-412b-a3c0-ead2484de790/image.png" alt="">우리가 다음과 같은 벡터A가 있다고 가정해보겠습니다. <span style = "color : red"><strong>det(A)</strong>는 두 기저벡터 (a,d),(b,c)가 이루고 있는 <strong>평행사변형의 넓이</strong></span>를 의미합니다.
왜 평행사변형의 넓이일까요? 바로 <strong>행렬식이 선형 변환의 크기 변화 비율</strong>을 나타내기 때문입니다.
먼저, <strong>행렬로 선형 변환의 크기 변화 비율</strong>을 나타낸다는 말은 <strong>2차원의 경우 변환이 적용된 도형의 면적 변화 비율</strong>을 나타냅니다. 즉, <strong>행렬식</strong>이 나타내는 값은 <span style = "color : red"><strong>선형 변환이 주어진 공간에서 크기를 얼마나 늘리거나 줄이는지</strong></span>를 설명합니다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/641fc91e-1fe1-4764-8257-fce09cd5f987/image.png" alt="">
위 행렬을 통한 선형변환은 한변의 길이가 1인 정사각형을 넓이가
ad-bc인 평행사변형꼴로 바꾼 선형변환입니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/b3b0c59f-45d2-4e28-8c92-73a03c018061/image.png" alt="">
결국 이 평행사변형의 넓이도 <strong>두 벡터가 독립적인지 아닌지</strong> 만약 독립이라면 넓이가 0이 될 것이며, 또한 <strong>2차원 공간</strong>이라는 의미를 지닙니다.</p>
</blockquote>
<p>이렇게 두 벡터를 곱해 넓이를 구하고 이런 일을 했다면 반대의 일도 할 것 같습니다. 이 때 나오는 개념이 <strong>역행렬</strong>인데요!</p>
<h2 id="역행렬">역행렬</h2>
<blockquote>
<h3 id="역행렬의-의의">역행렬의 의의</h3>
<p>행렬을 통해 시스템을 분석하고 해석하는 데 필수적인 도구로, 선형 방정식의 해를 찾거나, 선형 변환을 반대로 되돌리거나, 데이터 분석에서 모델링 등에 자주 사용됩니다.
수식은 <strong>1/det(A)이며, 1/ad-bc</strong>이 되겠습니다.
그렇다면 역행렬의 쓰임을 하나씩 알아볼게요!</p>
</blockquote>
<h4 id="1-선형방정식의-해-구하기">1. 선형방정식의 해 구하기</h4>
<p>AX = B라는 식이 있습니다. 이 때 X라는 해를 구하기 위해 A의 역행렬을 양 항에 곱하여 X = A^(-1)B가 될 수 있습니다.</p>
<h4 id="2-역변환">2. 역변환</h4>
<p>벡터에 행렬A를 곱하는 것은 그 벡터를 특정한 방식으로 변환하는 것입니다. 이때 A^(-1)를 활용하면 원래의 벡터로 복원할 수 있습니다.
AX = X &gt; A^(-1)A X = X A^(-1)</p>
<h4 id="3-항등행렬">3. 항등행렬</h4>
<p>또한 원래 행렬A에 역행렬을 곱하면 항등행렬 I가 됩니다.</p>
<p>오늘은 역행렬과 행렬식에 대해 알아봤습니다.
내용이 너무 어려워 단어로 작게작게 나누어 핵심만 적었는데 더 깊은 내용은 chatgpt를 활용하시면 좋을 것 같습니다~</p>
<p>감사합니다~!!!^^</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터분석의 기초] 선형대수 2탄 - 행렬의 기초 핵심만!]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-2%ED%83%84-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-2%ED%83%84-%ED%96%89%EB%A0%AC%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C</guid>
            <pubDate>Sun, 13 Oct 2024 14:50:40 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요^^ 이번 챕터는 벡터에 이어 행렬에 대해 알아보고자 합니다!
이번에도 배운 내용을 간략하게 핵심만 쏙쏙 뽑아 전달하도록 해볼게요~! 앞에 벡터를 안 보고 오신 분들은 한번 보고 오는 것을 추천드립니다!<p align="center" style="color:gray">
  <a href="https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-1%ED%83%84-%EB%B2%A1%ED%84%B0%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C">링크텍스트</a></p>
</p>
<hr></hr>


<h1 id="2-행렬">2. 행렬</h1>
<blockquote>
<h2 id="정의">정의</h2>
<p>행렬 : 숫자들을 격자 형태로 배열한 것으로, 주로 데이터나 변환을 표현하는 데 사용됩니다. 행과 열로 구성되며, 각 요소는 행과 열의 교차점에 위치합니다. 행렬은 대괄호로 둘러싸여 있으며, 각 행은 쉼표로 구분되고 각 열은 공백이나 쉼표로 구분합니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/63802945-3ad4-476e-997c-b685b80d3401/image.png" alt=""><span style = "color : red"><strong>n * p 형태</strong></span>로 <strong>n by p</strong>라고 읽으며 <span style = "color : red"><strong>n을 행, p를 열</strong></span>이라고 합니다.</p>
</blockquote>
<h2 id="연산">연산</h2>
<p>연산은 파이썬으로 한번 보겠습니다.</p>
<pre><code>import numpy as np

a = np.array([[1,4],[2,3]])
b = np.array([[5,6],[1,7]])

c = a + b
d = a - b
e = a * b
f = a / b 

print(a)
print()
print(b)
print()
print(c)
print()
print(d)</code></pre><p>이 코드의 결과는</p>
<pre><code>[[ 6 10]
 [ 3 10]]

[[-4 -2]
 [ 1 -4]]

[[ 5 24]
 [ 2 21]]

[[0.2        0.66666667]
 [2.         0.42857143]]</code></pre><p> 이렇게 나옵니다.</p>
<p> 각 연산에 대한 방법을 알아보도록 할게요!</p>
<ol>
<li><p>덧셈 : 같은 자리에 있는 값들끼리 더해졌습니다.
[[1+5, 4+6],
[2+1, 3+7]]</p>
</li>
<li><p>뺄셈 : 이 또한 동일합니다.
[[1-5, 4-6],
[2-1, 3-7]]</p>
</li>
<li><p>곱셈
[[1<em>5, 4</em>6],
[2<em>1, 3</em>7]]</p>
</li>
<li><p>나눗셈
[[1/5, 4/6],
[2/1, 3/7]]</p>
<h2 id="항등행렬">항등행렬</h2>
</li>
</ol>
<p> <strong>항등행렬</strong> : 주로 I로 표현하며 행렬의 곱셈에서 <strong>곱해도 변화하지 않는 역할</strong>을 하는 특별한 행렬입니다. 또한 항등행렬은 정방행렬일 때만 정의되며, 대각선 상의 원소는 1로, 나머지 원소는 0으로 채워집니다.
 <img src="https://velog.velcdn.com/images/data-marketing/post/03889242-67e1-4aa0-b805-3b61759c5470/image.png" alt="">
또한 항등행렬은 역행렬의 기본이 되므로 알아두면 좋습니다</p>
<h2 id="정방행렬">정방행렬</h2>
<p>그렇다면 정방행렬은 무엇일까요? 단순합니다.<img src="https://velog.velcdn.com/images/data-marketing/post/2016dc77-993c-4073-8387-5cc997374c75/image.png" alt="">
n과p가 동일하면 정방행렬입니다. 또한 a = aT인 경우 정방행렬은 대칭입니다.</p>
<h2 id="전치t">전치(T)</h2>
<p>n과 p 즉, 행과 열을 바꾼 것인데요. 예를 들어보겠습니다.</p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/d36efa1c-0cab-4252-be1b-ebdebd227a80/image.png" alt="">
<img src="https://velog.velcdn.com/images/data-marketing/post/1b415a2b-9f37-4f04-acea-2c7afd502bdc/image.png" alt="">
위 A는 2(행)*3(열)행렬입니다. 이를 전치하면 3행 2열이 됩니다.</p>
<h2 id="행렬간-곱">행렬간 곱</h2>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/771be969-9c37-4806-a05b-997040714c35/image.png" alt="">
A는 2X3행렬, B는 3X2행렬로 서로 곱할 경우
<strong>C = (3x3 + -1x6 + 4x2, 3x4 + -2x-1 + 2x3
      4x3 + 0x6 + 5x4,  4x4 + 0x(-2) + 5x3)</strong>
로 계산할 수 있습니다.</p>
<p>단순한 행렬의 계산에 대해 알아봤습니다. 다음은 행렬식(det(A)와 역행렬에 대해 다음 포스팅에서 마무리해볼게요!)</p>
<p>오늘도 읽어주셔서 감사합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터분석의 기초] 선형대수 1탄 - 벡터의 기초 핵심만!]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-1%ED%83%84-%EB%B2%A1%ED%84%B0%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98-1%ED%83%84-%EB%B2%A1%ED%84%B0%EC%9D%98-%EA%B8%B0%EC%B4%88-%ED%95%B5%EC%8B%AC%EB%A7%8C</guid>
            <pubDate>Sat, 12 Oct 2024 07:02:21 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요~!! 이번에는 새로운 포스팅을 적어보려 합니다!
데이터분석에서 가장 중요한 부분 중 하나가 <span style = "color : red"><strong>numpy</strong></span>를 다룰줄 아는 능력인 것 같아요! 결과가 np.array([]) 막 이런식으로 나오는 경우도 많아서 중요한 것 같습니다.
그래서 오늘은 그 numpy의 기초! <span style = "color: red"><strong>행렬과 벡터</strong></span>에 관한 얘기를 교수님이 해주신 핵심 수학에 틀을 두고 얘기해보겠습니다!</p>
<hr></hr>

<h1 id="선형대수란">선형대수란?</h1>
<blockquote>
<p>선형대수학이란 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분야</p>
</blockquote>
<p>라고 합니다! 하지만 너무 방대하고 다 외워야 돼? 이런생각이 드시죠!
그래서 이번 챕터는 그 중 기초들만 훑고 넘어가고자 합니다.
선형대수 파이썬 챕터에서 실습을 하는게 더 중요하니까요!!</p>
<h2 id="선형대수의-필요성">선형대수의 필요성</h2>
<blockquote>
<p>① 주어진 데이터를 어떤 공간에 표현하는 것을 말합니다.
② A대학교 학생의 여러 속성들을 여러 학생들에게 일반화 시키기
③ 2번의 내용을 행렬로 표현한게 선형대수입니다.</p>
</blockquote>
<h2 id="1-벡터">1. 벡터</h2>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/f551cfc7-b60a-4535-ab3e-c5e1b6b88730/image.png" alt=""></p>
<h3 id="정의">정의</h3>
<p>벡터 : 크기와 방향을 가지고 있는 양의 개념 (크기 + 방향)
스칼라 : 방향이 없는 물리적인 양 (only 크기)</p>
<h3 id="표현과-차원">표현과 차원</h3>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/80d6519e-660a-4b19-b9d8-3fce6d47cb34/image.png" alt="">
이렇게 표현하고 <span style = "color : red"><strong>v1과 v2를 벡터의 성분</strong></span>이라고 표현하며
다음과 같이 2개의 벡터로 이뤄져 있는 벡터를 2차원 벡터 3개면 3차원 벡터 이렇게 말합니다. 즉, <span style = "color : red"><strong>벡터의 차원은 성분의 개수</strong></span>를 의미합니다.</p>
<h3 id="벡터의-연산">벡터의 연산</h3>
<p>벡터의 연산은 파이썬 코드로 보겠습니다.</p>
<pre><code>import numpy as np

list1 = [1,3,2]
list2 = [5,3,7]
v1 = np.array(list1)
v2 = np.array(list2)
scaler = 5

print(v1)
print(v1 + v2)
print(v1-v2)
print(v1 * scaler)</code></pre><p>해당 코드의 결과는 아래와 같습니다.</p>
<pre><code>[1 3 2]
[6 6 9]
[-4  0 -5]
[ 5 15 10]</code></pre><p>벡터간 덧셈과 뺄셈은 <span style = "color : red"><strong>성분간 덧셈 뺄셈</strong></span>이며,
벡터와 스칼라 곱은 <span style = "color : red"><strong>스칼라가 각 성분에 곱해지는 특징</strong></span>이 있습니다.</p>
<p>각각 그래프로 한번 보자면~</p>
<blockquote>
<h4 id="벡터의-덧셈">벡터의 덧셈</h4>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/54d71fea-a592-4183-b24f-ff676e589629/image.png" alt=""></p>
</blockquote>
<h4 id="벡터의-곱셈">벡터의 곱셈</h4>
<p>양의 방향 혹은 음의 방향으로 <span style = "color : red"><strong>스칼라 곱만큼 가는 것</strong></span>
<img src="https://velog.velcdn.com/images/data-marketing/post/7cdd9511-97ad-4714-8290-2e96e74fd1fa/image.png" alt=""></p>
<p>이들의 공통점은 <span style = "color : red"><strong>위치로 표시된다</strong></span>는 것입니다. 무슨 말이냐~ (a,b,c)처럼 표시된다는 것입니다. 값 3.75이런 것이 아닌 <span style = "color : red"><strong>현재 포인트의 위치</strong></span>를 말한다는 것을 꼭 알아주세요!</p>
<p>그렇다면 이렇게 결과가 나왔다면 길이는 어떻게 구할까요?</p>
<h3 id="벡터의-길이">벡터의 길이</h3>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/b0d25db8-7554-49ae-b1ca-cb0fb5170ced/image.png" alt="">
벡터의 길이는 다음과 같습니다. <span style = "color : red"> ** x1과 x2를 각각 제곱하고 더한다음 루트!<strong></span> 이것이 벡터의 길이인데요 이건 바로 <span style = "color : red"> **피타고라스의 정리입니다! 삼각형 빗변 구하기 공식</strong></span>이죠!
길이를 L, 벡터를 x라고 한다면 벡터 X의 길이는 LX라고 나타낼 수 있습니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/74ca661d-548d-471a-a7a2-196cdc42e836/image.png" alt="">
그러면 이 빗변과 밑변이 이루는 각은 또 무슨 의미가 있을까요?</p>
<h3 id="벡터의-각">벡터의 각</h3>
<p>벡터의 각은 <span style = "color : red"> <strong>두 벡터의 관계</strong></span>를 의미합니다!
<img src="https://velog.velcdn.com/images/data-marketing/post/17c5e78e-6154-42b6-afc7-f0eaac803849/image.png" alt="">
다음과 같이 A벡터와 B벡터가 있을 때 이 <span style = "color : red"> <strong>두 벡터가 이루는 각을 theta</strong></span>라고 합니다. 또한 밑변과 빗변이 이루는 관계를 표현한 것이기 때문에 <span style = "color : red"> <strong>cos(theta)</strong></span>로 구할 수 있습니다.
그러면 cos(theta)의 그래프는 어떻게 생겼을까요?
<img src="https://velog.velcdn.com/images/data-marketing/post/968981bc-f5b8-4c48-b64f-1250b3ba847c/image.png" alt=""></p>
<p>그래프는 다음과 같습니다. 원형으로 표시한 부분이 <span style = "color : red"> <strong>cos(theta)값이 0이 되는 부분으로 theta의 각은 90, 270도</strong></span> 입니다. 
반면 <span style = "color : red"> <strong>0도, 180도 인 부분은 cos(theta)의 값이 1</strong></span>인 것을 확인할 수 있습니다.</p>
<blockquote>
<p><strong>수식</strong> <img src="https://velog.velcdn.com/images/data-marketing/post/f88ad591-363b-448e-8cd1-ee8f080599fa/image.png" alt=""> cos(theta)는 X와 Y의 곱을 X의 길이 * Y의 길이로 나눈 값입니다.</p>
</blockquote>
<p>이들이 갖고 있는 의미는 무엇일까요? 중간 요약을 봅시다.</p>
<blockquote>
<h4 id="요약">요약</h4>
</blockquote>
<ol>
<li><span style = "color : red"> <strong>벡터는 방향과 크기</strong></span>를 갖고 있습니다.</li>
<li>두 벡터가 있을 때, 두 벡터가 <span style = "color : red"> <strong>서로 같은 방향</strong></span>을 바라 보면 <span style = "color : red"> <strong>관계가 있다</strong></span>라고 표현할 수 있고 <span style = "color : red"> <strong>90도 그 이상의 각도로 벌어질 경우 관계가 없다</strong></span>라고 표현할 수 있습니다.</li>
<li>두 벡터가 있을 때 <span style = "color : red"> <strong>두 벡터의 덧셈으로 구해진 선은 피타고라스의 정리</strong></span>로 구할 수 있습니다. 그것을 <strong>LX</strong>라고 표현했습니다.</li>
<li>이 빗변이 밑변과 이루는 각을 theta라고 했을 때, theta의 각도에 따라 cos(theta)의 값이 달라집니다. <span style = "color : red"> <strong>theta의 값이 예각일 경우 두 벡터는 관계가 있다.</strong></span> <strong>둔각일 경우 관계가 없다.</strong> <span style = "color : red"> <strong>직각일 경우 서로 독립적</strong></span>이다 라고 표현할 수 있습니다.</li>
<li>2개의 벡터가 이루는 각은 theta이며, 이 값은 cos(theta)로 구하는데 cos(theta)의 결과는 -1 ~ 1입니다.<span style = "color : red"> <strong>0은 관련이 없다 1은 관계가 있음</strong></span>을 의미합니다.<br></li>
</ol>
<p><strong>즉</strong>, 두 벡터가 얼마나 관련이 있지?를 표현하고자 하는 것이라고 할 수 있을 것 같습니다.</p>
<h3 id="벡터의-내적두-벡터의-연관성을-의미">벡터의 내적(두 벡터의 연관성을 의미)</h3>
<blockquote>
<h4 id="정의-1">정의</h4>
<p>두 벡터의 각 성분을 곱하고 그 결과를 모두 더하는 연산<img src="https://velog.velcdn.com/images/data-marketing/post/d4d788d8-e275-4377-a361-00ffc8ef3e97/image.png" alt="">
두 벡터 a와 b가 이루는 각이 (𝜃)일 때
<img src="https://velog.velcdn.com/images/data-marketing/post/f6ed3f33-4dbf-4423-b998-b7d62db665fc/image.png" alt="">
즉, 두 벡터의 크기와 이루는 각의 코사인 곱을 통한 연산
하지만, 결과는 <span style = "color : red"><strong>스칼라</strong></span></p>
</blockquote>
<h4 id="특징">특징</h4>
<p>① <strong>유사도 측정</strong> : 두 벡터가 비슷한 방향을 가지고 있을수록 내적 값은 크고, 서로 다른 방향을 가지고 있을수록 내적 값은 작아집니다.
② <strong>투영</strong> : 벡터 내적은 한 벡터를 다른 벡터 방향으로 투영한 길이를 계산하는 데 활용
③ <strong>역행렬과 선형 시스템</strong>: 벡터 내적은 선형 방정식과 역행렬 계산에 사용될 수 있습니다. 선형 시스템의 해를 구할 때 내적은 계수 행렬과 해 벡터의 관계를 표현하는 데 활용</p>
<h3 id="직교orthogonal">직교(orthogonal)</h3>
<p>위에서 cos(theta)의 값이 0일 경우 이루는 각이 90도 라고 했던 부분 기억나시나요? 90도는 직각이라고 말할 수 있고 X와 Y가 직교한다. 라고 표현할 수 있습니다. <img src="https://velog.velcdn.com/images/data-marketing/post/55ff3438-cf04-47b5-98a4-ff7a7a9b2f8c/image.png" alt="">
<span style = 'color:red'><strong>두 벡터 X와 Y가 서로 독립</strong></span>이다. 라고 표현할 수 있습니다.</p>
<h3 id="사영--y로-설명될-수-있는-x정보량">사영 : Y로 설명될 수 있는 X정보량</h3>
<p>위에서 내적의 특징 중 2번 기억하시나요? 투영! 바로 <span style = 'color:red'><strong>Y라는 벡터에 X라는 벡터를 내리 꽂는 기술</strong></span>을 <span style = 'color:red'><strong>사영</strong></span>이라고 합니다. 사영이 이뤄지기 위해서는 <span style = 'color:red'><strong>예각</strong></span>이어야 합니다. 왜 일까요? <span style = 'color:red'><strong>90도 이상의 각도로 벌어지면 사영되는 각이 안나오</strong></span>기 때문입니다.
즉, <span style = 'color:red'><strong>theta가 90보다 작아</strong></span>야 사영이 이루어지며 <span style = 'color:red'><strong>theta의 크기에 따라 정보량이 달라진답니다.</strong></span></p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/a052cc77-7ce8-43ca-ae12-9beaef195410/image.png" alt="">
(가) 그래프와 (나) 그래프의 각도 차이가 보이시나요? A벡터가 X, B벡터가 Y라고 했을 때, <span style = 'color:red'><strong>각도에 따라 정보량이 달라집니다.</strong></span> (나) 그래프가 가지고 있는 <span style = 'color:red'><strong>정보량의 의미가 더 작음</strong></span>을 알 수 있어요! 이 말은 <span style = 'color:red'><strong>Y로 설명될 수 있는 X정보량이 작다</strong></span>를 말합니다.</p>
</blockquote>
<h2 id="5줄-요약">5줄 요약</h2>
<blockquote>
<ol>
<li>벡터는 방향과 크기를 갖고 있으며, 스칼라는 크기만 갖고 있다.</li>
<li>두 벡터의 각으로 방향성을 볼 수 있으며 이 방향성은 관계성을 말하고 방향이 같을수록 즉, 각이 작을 수록 관계가 깊다고 표현할 수 있다.</li>
<li>관계가 깊을수록 Y로 설명될 수 있는 X정보량이 많음을 의미하고 이를 사영이라고 말한다. 정보량이 많을수록 theta의 값은 작고 예각일 때 이는 돋보인다.</li>
<li>theta의 각이 0혹은180일 때 cos(theta)의 값은 1이고 90,270일 때 값은 0이다. 값이 0일 때 두 벡터가 서로 독립이라고 표현한다. 이를 직교라고 말했다.</li>
<li>내적은 중요하다!</li>
</ol>
</blockquote>
<p>오늘도 읽어주셔서 감사합니다.
다음은 2탄 행렬로 찾아뵐게요!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터 스케일링] 정규화란 무엇일까?(Normalization)]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81-%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CNormalization</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81-%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CNormalization</guid>
            <pubDate>Wed, 09 Oct 2024 03:23:24 GMT</pubDate>
            <description><![CDATA[<p>이번에는 표준화에 이어 정규화에 대해 말하고자 합니다~!</p>
<hr></hr>

<h1 id="데이터-정규화란">데이터 정규화란?</h1>
<p><span style="color: red;"><strong>데이터 정규화</strong></span>란 무엇일까요? 머신러닝에 사용되는 데이터는 <strong>그 값이 너무 크거나 작지 않고 적당한 범위에 있어야</strong> 모델의 정확도가 높아집니다.</p>
<p>아래 수식처럼 변수 x의 원래 값에서 x의 최솟값을 뺀 값을 x의 최댓값과 최솟값의 차이로 나눈 값으로 계산할 수 있습니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/4a5450e9-0999-487c-bbd8-2d6ff088734e/image.png" alt=""></p>
<h3 id="▶-언제-사용할까">▶ <strong>언제 사용할까?</strong></h3>
<blockquote>
<p>ex)
a : 하나의 x변수가 금액을 나타내는 변수 0 ~ 20000원
b : 하나의 x변수가 거리를 나타내는 변수 1 ~ 2000km
로 주어질 경우 이 변수를 동일한 크기(단위)인 0<del>1사이로 변환하는 것입니다.
하지만, 기호에 따라 1</del>10까지 스케일링을 해도 괜찮습니다. 원하는 범위를 지정하여 스케일링할 수 있습니다.</p>
</blockquote>
<h3 id="▶--특징">▶  <strong>특징</strong></h3>
<blockquote>
<p>① 정규화를 통해 변수들을 일정범위 내로 좁혀 평등한 범위 내에서 관찰 및 학습 가능
② 하지만 minmax scaler는 0 ~ 1 같은 분류문제에서는 효과가 좋지 않고 <span style="color: red;">회귀문제 해결 시 더 적합한 스케일링 방법</span></p>
</blockquote>
<h3 id="▶-실습">▶ 실습</h3>
<blockquote>
<p><span style="color: red;">*<em>minmaxscaler : *</em></span>데이터의 값을 0~1사이로 정규화 시키기 위해 minmaxscaler를 활용합니다.
(만약 음수가 있을경우 -1 ~ 1사이로 변환해줍니다.)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/ec790cf4-9a2c-425f-a717-a1567908808c/image.png" alt=""></p>
<pre><code>c = titanic_df[[&#39;Age&#39;, &#39;Fare&#39;]]

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

train_minmax = scaler.fit_transform(c)
train_minmax</code></pre><p><img src="https://velog.velcdn.com/images/data-marketing/post/35220acc-41dd-44de-ac18-9ea38ea71357/image.png" alt=""></p>
<p>titanic 데이터의 age와 fare를 활용해 예시문을 작성했습니다.
<span style="color: red;"> <strong>minmax scaler</strong></span>는 sklearn에서 import를 해와야 하며 <span style="color: red;"> <strong>fit_transform()</strong></span> 함수를 활용하여 scaling시켜줍니다.</p>
<pre><code class="language-![](https://velog.velcdn.com/images/data-marketing/post/0729d486-9f5b-4f96-8dc6-f97aae69dde4/image.png)">
pd.DataFrame(train_minmax, index = c.index, columns = c.columns)</code></pre>
<p>이후에는 해당 코드를 통해 데이터프레임 형태로 만들어주면 결과는<img src="https://velog.velcdn.com/images/data-marketing/post/92442aa6-22b0-49e6-890e-72fcc3f4b60c/image.png" alt=""></p>
<p>다음과 같이 나오게 됩니다.</p>
<h3 id="5줄-요약">5줄 요약</h3>
<blockquote>
</blockquote>
<h4 id="1-minmax-scaler는-01사이로-값의-범위를-평등하게-해주는-것">1. minmax scaler는 0~1사이로 값의 범위를 평등하게 해주는 것</h4>
<h4 id="2-분류문제-해결-시는-효과적이지-않지만-회귀문제에서는-효과적">2. 분류문제 해결 시는 효과적이지 않지만 회귀문제에서는 효과적</h4>
<h4 id="3-실제로-데이터를-여러-개-불러와서-분석을-진행할-때-많이-썼던-정규화방법">3. 실제로 데이터를 여러 개 불러와서 분석을 진행할 때 많이 썼던 정규화방법</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터 스케일링] 표준화란 무엇일까?(Standard Scaler)]]></title>
            <link>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CMinMax-Standard-Robust</link>
            <guid>https://velog.io/@data-marketing/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8CMinMax-Standard-Robust</guid>
            <pubDate>Mon, 02 Sep 2024 13:54:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/data-marketing/post/e545915f-f288-4571-910a-d227c3e9e2a2/image.png" alt="">
실습 데이터 : load_breast_cancer</p>
<hr>
안녕하세요 여러분 이번에 새롭게 데이터분석 및 마케팅 데이터 마케팅을 공부하며 글을 작성해보려 합니다.
유용한 정보 많이 얻어가시고 같이 공부하면 좋을 것 같아요!
<hr>

<h1 id="데이터-스케일링">데이터 스케일링</h1>
<p><span style="color: red;"><strong>데이터 스케일링이란</strong></span> <strong>서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업</strong>을 얘기합니다. 그리고 또한 해당 작업은 값을 조정하는 것이기 때문에 <strong>수치형</strong>에만 적용을 해야합니다!</p>
<blockquote>
<h3 id="언제-사용할까"><strong>언제 사용할까?</strong></h3>
<p>ex)
X1은 값이 0~100사이
X2는 값이 1000 ~ 10000사이
Y는 1000 ~ 10000사이라면 X1은 Y에 큰 영향을 안 끼칠 수 있습니다. 이 때 모든 값들을 동일한 범위내로 만들어주고 싶을 때 스케일링 작업을 해준다고 생각하시면 좋을 것 같아요!</p>
</blockquote>
<p>여기에는 <strong>표준화와 정규화</strong> 방법이 있는데 각각에 대해 한번 보겠습니다.</p>
<blockquote>
</blockquote>
<p>🟢 <strong>표준화</strong> : 평균을 0, 표준편차를 1로 변환하여 데이터를 조정하는 것을 의미
🔴 <strong>정규화</strong> : 데이터를 특정범위로 변환하여 범위를 일치시키는 작업을 의미</p>
<p>그렇다면 데이터 스케일링 中 🟢<strong>표준화</strong>에는 <strong>어떤 종류</strong>가 있을까요?
한번 종류별로 알아봅시다!</p>
<blockquote>
<h1 id="표준화">표준화</h1>
</blockquote>
<h2 id="-standard-scaler">※ Standard Scaler</h2>
<p>첫번째는 가장 많이 사용되는 <span style="color: red;"><strong>Standard Scaler</strong></span>입니다.
<img src="https://velog.velcdn.com/images/data-marketing/post/59123135-413a-4afc-89f0-bc4ce3f9cc67/image.png" alt="">
해당 식은 Z표준화라고 하는 식이며, 스탠다드 스케일링은 가장 많이 사용되는 표준화 방법 중 하나인데요.</p>
<p>사이킷런 데이터셋 중 load_breast_cancer 데이터를 활용해 간단한 표준화 예시를 들어볼게요!</p>
<blockquote>
<blockquote>
<h2 id="예시--load_breast_cancer">예시 : load_breast_cancer</h2>
</blockquote>
</blockquote>
<pre><code>from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()</code></pre><p>caner 변수에 데이터를 로드합니다.</p>
<pre><code>data = pd.DataFrame(data = cancer.data, columns = cancer.feature_names)

data[&#39;target&#39;] = cancer.target
data[&#39;target&#39;]

data</code></pre><p>데이터프레임형태로 바꿔준 뒤, 각 컬럼들에 대한 시각화를 해봤는데요
<img src="https://velog.velcdn.com/images/data-marketing/post/5704f430-f8c8-4724-9197-37a7a731a736/image.png" alt="">
<img src="https://velog.velcdn.com/images/data-marketing/post/c9acef43-9403-4986-8845-9702be947a97/image.png" alt="">
주로 이러한 형태를 지닌 그래프인데요. 
이를 표준화를 하면
<img src="https://velog.velcdn.com/images/data-marketing/post/446f1291-980d-473f-bd1b-e36aa49f5f2b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/data-marketing/post/8fc37b32-a6e0-47be-8af1-36a16c7d1adf/image.png" alt=""></p>
<p>다음과 같습니다. 변화를 아시겠나요?
<span style="color: red;"><strong>y축이 평균이 0을 기준으로 표준화</strong></span>된 것을 볼 수 있습니다.
파이썬에서 표준화를 하기 전 주의사항이 있습니다. 바로 <span style="color: red;"><strong>fit</strong></span>을 진행해야한다는 것인데요!</p>
<pre><code>from sklearn.preprocessing import StandardScaler

# StandardScaler 인스턴스 생성
std = StandardScaler()

# 먼저 fit을 통해 데이터를 학습시킴
std.fit(data[[&#39;mean radius&#39;]])  # 데이터는 2D 형태로 전달되어야 함

# 데이터를 변환하여 표준화
r = std.transform(data[[&#39;mean radius&#39;]])

# 결과 출력
plt.plot(r, color = &#39;red&#39;)</code></pre><p>다음과 같이 fit을 한 뒤, 이를 표준화시켜줘야 합니다.</p>
<p>실제로 스케일링을 했을 때와 안 했을 때 모델의 성능 또한 다른데요</p>
<pre><code>X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size = 0.2, random_state=42, shuffle = False)
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)
print(&#39;모델 정확도 : &#39;, round(dtc.score(X_test, y_test), 4))</code></pre><p>스케일링을 안 했을 때의 결과는 <img src="https://velog.velcdn.com/images/data-marketing/post/437785fc-031b-4d67-894d-3686aa282133/image.png" alt=""></p>
<p>했을 때의 결과는 </p>
<pre><code>from sklearn.preprocessing import StandardScaler

std = StandardScaler()
std.fit(X_train)
X_train_scaled = std.transform(X_train)
X_test_scaled = std.transform(X_test)
dtc.fit(X_train_scaled, y_train)
print(&#39;모델의 정확도 :&#39;, round(dtc.score(X_test_scaled, y_test), 4))</code></pre><p><img src="https://velog.velcdn.com/images/data-marketing/post/46fc9173-8dc3-4ead-8fad-bbee24cad694/image.png" alt="">
다음과 같습니다 &gt; 성능 차이가 보여지나요? 또한 각각에 대해 히스토그램 시각화를 진행하게 될 경우
<img src="https://velog.velcdn.com/images/data-marketing/post/77cfc346-0dcb-4652-9a61-e2e7ff79bef2/image.png" alt="">
<img src="https://velog.velcdn.com/images/data-marketing/post/e06bfb28-ed33-4e35-8e4a-3701c3f55554/image.png" alt="">
평균 0을 기준으로 1~4 시그마 정도씩 그래프가 그려지는 모습을 볼 수 있습니다.</p>
<h1 id="5줄-요약">5줄 요약</h1>
<blockquote>
<h4 id="1-표준화는-평균-0-표준편차-1의-범위로-데이터를-표준에-맞게-통일시키는-것">1. 표준화는 평균 0, 표준편차 1의 범위로 데이터를 표준에 맞게 통일시키는 것</h4>
</blockquote>
<h4 id="2-데이터마다-값이-다르기-때문에-y축-즉-값을-일정범위에-일치시켜주고-싶을-때-사용">2. 데이터마다 값이 다르기 때문에 y축, 즉 값을 일정범위에 일치시켜주고 싶을 때 사용</h4>
<h4 id="3-모델을-학습시키기-전에-사용을-하며-범위가-비슷하면-모델이-학습을-할-때-더-잘-할-수-있기에-이를-활용한다">3. 모델을 학습시키기 전에 사용을 하며 범위가 비슷하면 모델이 학습을 할 때 더 잘 할 수 있기에 이를 활용한다.</h4>
<h4 id="4-datamean-texture와-같이-2차원-형태의-구조에서-활용가능하다">4. data[[&#39;mean texture&#39;]]와 같이 2차원 형태의 구조에서 활용가능하다.</h4>
<h4 id="5-반드시-fit을-해준-뒤-활용해야한다">5. 반드시 fit을 해준 뒤, 활용해야한다.</h4>
]]></description>
        </item>
    </channel>
</rss>