<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>all_young.log</title>
        <link>https://velog.io/</link>
        <description>My_Spielraum</description>
        <lastBuildDate>Sun, 27 Aug 2023 05:52:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>all_young.log</title>
            <url>https://velog.velcdn.com/images/all_young/profile/c9fec391-ca6b-4de7-93f8-51331f6351cd/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. all_young.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/all_young" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Understanding Kubernetes API]]></title>
            <link>https://velog.io/@all_young/Understanding-Kubernetes-API</link>
            <guid>https://velog.io/@all_young/Understanding-Kubernetes-API</guid>
            <pubDate>Sun, 27 Aug 2023 05:52:13 GMT</pubDate>
            <description><![CDATA[<h1 id="들어가며">들어가며</h1>
<ul>
<li><p>Kubernetes API 탐색을 시작하기 전에 이 연습 예제는 API를 명령적으로 사용하는 방법을 보여줍니다. 즉, 명령을 수동으로 입력한다는 의미입니다.</p>
</li>
<li><p>일반적으로 우리는 Kubernetes API로 선언적으로 작업하기를 원합니다. 즉, Kubernetes API가 원하는 상태를 이해하기 위해 읽는 간단한 파일을 만든 다음 현재 상태에서 해당 상태를 달성하려고 시도합니다.</p>
</li>
<li><p>Kubernetes API를 이해하기 위해 Hello World 애플리케이션을 배포하는 매우 간단한 예를 살펴보겠습니다.</p>
</li>
<li><p>포트 8080의 로컬 IP에서 ping할 때 단순히 &quot;Hello World&quot;를 에코하는 컨테이너화된 애플리케이션을 만들었다고 상상해 보십시오.</p>
</li>
<li><p><strong><em>ping</em></strong>이란 Paket Internet Groper의 약자이며 컴퓨터 네트워크 상태를 점검, 진단하는 명령어</p>
</li>
</ul>
<h2 id="예시">예시</h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/71a8ea27-197e-443d-967c-8325fb4b0ab7/image.png" alt=""></p>
<ul>
<li>레플리카(Replica)는 파드(Pod)의 복제본을 관리하는 역할</li>
<li>레플리카의 주요 역할과 기능은 다음과 같습니다:<ol>
<li><strong>가용성과 복원성 보장</strong>: 레플리카는 파드의 복제본을 관리함으로써 애플리케이션의 가용성을 높이고 장애 발생 시에도 복제본을 통해 서비스의 지속성을 유지할 수 있습니다.</li>
<li><strong>자동 스케일링</strong>: 레플리카 컨트롤러 또는 레플리카셋을 통해 파드의 수를 자동으로 스케일 업 또는 스케일 다운할 수 있습니다. 이를 통해 수요에 따라 애플리케이션의 리소스 사용을 조정할 수 있습니다.</li>
<li><strong>Desired State 유지</strong>: 레플리카 컨트롤러 또는 레플리카셋은 지정된 파드 개수를 유지하는데 중점을 두며, 원하는 상태를 지속적으로 유지하도록 노력합니다. 필요에 따라 파드의 생성, 수정 및 삭제를 관리합니다.</li>
<li><strong>롤링 업데이트 및 롤백</strong>: 레플리카의 버전 업데이트를 통해 애플리케이션을 업데이트할 수 있으며, 롤링 업데이트와 롤백을 지원하여 서비스 중단 없이 버전을 변경할 수 있습니다.</li>
<li><strong>모니터링 및 자동 복구</strong>: 레플리카 컨트롤러 또는 레플리카셋은 파드의 상태를 모니터링하고, 파드가 실패한 경우 자동으로 복구하거나 대체 파드를 생성하여 시스템 안정성을 유지합니다.</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/fa0fc04e-40d4-463a-8182-0bcec1c4e63b/image.png" alt=""></p>
<ul>
<li>Kubernetes 클러스터 내의 Deployment를 외부로 노출시키는 작업을 수행하는 명령어</li>
<li><strong><code>dbs</code></strong>라는 이름의 Deployment를 클러스터 외부로 노출시키며, 외부에서 80번 포트로 액세스할 수 있도록 하고, 이를 위해 클라우드 제공자의 로드 밸런서를 사용하여 트래픽을 분산시키는 설정을 생성합니다.</li>
<li><strong><code>dbs</code></strong> Deployment에 있는 애플리케이션을 외부에서 접근 가능하게 만듭니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/1dc3c8c5-71fb-4b26-bf57-ba631a470f7e/image.png" alt=""></p>
<ul>
<li>Kubernetes 클러스터 내의 Deployment 리소스를 편집하는 명령어</li>
<li>추상화를 제공하고 모든 복제된 컨테이너화된 애플리케이션에 대한 single point of contact를 허용하는 서비스를 통해 노드 전체에 배포된 새 업데이트를 쉽게 롤아웃할 수 있으며 서비스가 자동으로 업데이트됩니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Google Cloud Storage]]></title>
            <link>https://velog.io/@all_young/Google-Cloud-Storage</link>
            <guid>https://velog.io/@all_young/Google-Cloud-Storage</guid>
            <pubDate>Sun, 20 Aug 2023 08:51:32 GMT</pubDate>
            <description><![CDATA[<h1 id="00-cloud-storage-overview">00. Cloud Storage Overview</h1>
<h2 id="gcp에서-cloud-storage-특징-및-유스케이스">GCP에서 Cloud Storage 특징 및 유스케이스</h2>
<ol>
<li>Core Ideas and Key Features</li>
<li>Buckets and Objects</li>
<li>Storage Classes</li>
<li>Security and Accessibility</li>
</ol>
<br>

<h3 id="core-ideas-and-key-features">Core Ideas and Key Features</h3>
<ul>
<li><p>Cloud Storage:</p>
<ul>
<li>Google Cloud에서 사용자의 object들을 저장하는 서비스</li>
<li>object: Cloud Storage에 저장되는 파일, 데이터, 미디어 등의 단위</li>
</ul>
</li>
<li><p>사용자는 Buckets라 불리는 Containers에 object를 저장할 수 있다.</p>
</li>
<li><p>모든 Buckets은 프로젝트와 관련 있으며, 사용자는 프로젝트들을 그룹화할 수 있다.</p>
</li>
<li><p>사용자가 프로젝트를 만든 후, Cloud Storage buckets을 만들 수 있으며 buckets으로 부터 object들을 업로드 또는 다운로드 할 수 있다.</p>
</li>
<li><p>사용자의 데이터 접근에 대한 권한을 줄 수 있다.</p>
</li>
</ul>
<br>

<h3 id="bucket">Bucket</h3>
<ul>
<li>각 프로젝트는 여러개의 bucket들을 가지고 있다.</li>
<li>bucket은 사용자의 object를 저장할 수 있는 컨테이너</li>
</ul>
<br>

<h3 id="cloud-storage-use-cases">Cloud Storage Use Cases</h3>
<ul>
<li>Web Application Content</li>
<li>General Data Storage<ul>
<li>Archiving</li>
<li>Backup Recovery</li>
</ul>
</li>
<li>Distributing large data sources for public download</li>
</ul>
<br>

<h3 id="cloud-storage">Cloud Storage</h3>
<ul>
<li>구글의 클라우드 기반 객체 스토리지 서비스로, 파일이나 데이터를 안전하게 저장하고 검색할 수 있는 환경을 제공</li>
</ul>
<br>

<h3 id="storage-classes">Storage Classes</h3>
<ul>
<li>Standard</li>
<li>Nearline</li>
<li>Coldline</li>
<li>Archive</li>
</ul>
<br>

<h3 id="security-features">Security Features</h3>
<ul>
<li>IAM Controls</li>
<li>Data Encryption</li>
<li>Authentication</li>
<li>Bucket Lock</li>
<li>Object Versioning</li>
</ul>
<br>

<hr>
<br>

<h1 id="01-google-cloud-storage-options">01. Google Cloud Storage Options</h1>
<h2 id="object">OBJECT</h2>
<h3 id="cloud-storage-1">Cloud Storage</h3>
<ul>
<li>Use Case:<ul>
<li>Object Data or Binary Data</li>
</ul>
</li>
<li>Example:<ul>
<li>Images, Media, Backups</li>
</ul>
</li>
</ul>
<br>

<h2 id="file">FILE</h2>
<h3 id="filestore">Filestore</h3>
<ul>
<li>Use Case:<ul>
<li>NAS (Network Attacjed Storage)</li>
</ul>
</li>
<li>Example:<ul>
<li>Low Latency with High Throughput</li>
</ul>
</li>
</ul>
<br>

<h2 id="relational">RELATIONAL</h2>
<h3 id="cloud-sql">Cloud SQL</h3>
<ul>
<li>Use Case:<ul>
<li>Web Frameworks</li>
</ul>
</li>
<li>Example:<ul>
<li>eCommerce Site, CMS</li>
</ul>
</li>
</ul>
<h3 id="cloud-spanner">Cloud Spanner</h3>
<ul>
<li>Use Case:<ul>
<li>RDBMS at scale, HA, HTAP</li>
</ul>
</li>
<li>Example:<ul>
<li>Metadata, Transactions</li>
</ul>
</li>
</ul>
<br>

<h2 id="non-relational">NON-RELATIONAL</h2>
<h3 id="firestore">Firestore</h3>
<ul>
<li>Use Case:<ul>
<li>Mobile and Web</li>
</ul>
</li>
<li>Example:<ul>
<li>User Profiles, App States</li>
</ul>
</li>
</ul>
<h3 id="cloud-bigtable">Cloud Bigtable</h3>
<ul>
<li>Use Case:<ul>
<li>High Read and Write or Event Data</li>
</ul>
</li>
<li>Example:<ul>
<li>Finance, IoT, AdTech </li>
</ul>
</li>
</ul>
<br>

<hr>
<p>Udemy의 KubeFlow Bootcamp 강의를 통해 학습한 내용을 정리한 것입니다.
링크: <a href="https://www.udemy.com/course/kubeflow-bootcamp/">https://www.udemy.com/course/kubeflow-bootcamp/</a> </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GCP (Google Cloud Platform) Network]]></title>
            <link>https://velog.io/@all_young/GCP-Google-Cloud-Platform-Network</link>
            <guid>https://velog.io/@all_young/GCP-Google-Cloud-Platform-Network</guid>
            <pubDate>Sun, 20 Aug 2023 08:38:53 GMT</pubDate>
            <description><![CDATA[<h1 id="00-gcp-network-infrastructure">00. GCP Network Infrastructure</h1>
<h2 id="구글-클라우드의-region과-zone">구글 클라우드의 Region과 Zone</h2>
<blockquote>
<p><strong>GCP는 리전 내 연결된 영역을 사용하여 데이터와 컴퓨팅 성능을 저장한다.</strong></p>
</blockquote>
<ul>
<li>리전은 리소스를 호스팅하는 지리적 위치이다.</li>
<li>리전은 3개 이상의 zone을 가질 수 있다.</li>
<li>예를 들어, 리전이 us-west1이면 us-west1-a, us-west1-b, us-west1-c의 zone을 가질 수 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/fb6455f4-009c-44e0-808e-b45a9d6738f5/image.png" alt=""></p>
<br>

<hr>
<br>

<h1 id="01-gcp-network-connections">01. GCP Network Connections</h1>
<p><img src="https://velog.velcdn.com/images/all_young/post/30875f4f-79b5-4037-afb1-2fa19c585695/image.png" alt=""></p>
<h3 id="overview">Overview</h3>
<blockquote>
<ul>
<li>Edge Points of Presence (POPs)를 통해서 GCP에 요청을 보내며, POPs가 아닌 Edge Nodes (Google Global Cache, or GGC)를 사용할 수도 있다.</li>
</ul>
</blockquote>
<br>

<h3 id="google-클라우드-데이터-센터에-도달해야-하는-상황이라면">Google 클라우드 데이터 센터에 도달해야 하는 상황이라면.</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/624acce3-b887-4ab4-b86a-622c90297d06/image.png" alt=""> | <img src="https://velog.velcdn.com/images/all_young/post/e0dd6ae4-5a23-42ed-a3d4-9751aa527658/image.png" alt="">
| --- | --- |</p>
<blockquote>
<p>예를 들어 실제로 GCP를 사용하여 계산을 수행하거나 데이터베이스 스토리지에서 데이터를 검색하는 경우</p>
</blockquote>
<br>

<h3 id="google-cloud에서-호스팅되는-일부-콘텐츠가-특정-지역에서-매우-인기가-있다면">Google Cloud에서 호스팅되는 일부 콘텐츠가 특정 지역에서 매우 인기가 있다면.</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/9a51c5f4-5941-4b6e-91e7-8e1add23f559/image.png" alt=""> | <img src="https://velog.velcdn.com/images/all_young/post/b41d235b-b01a-4d50-9add-a02f5c0692fa/image.png" alt=""> | <img src="https://velog.velcdn.com/images/all_young/post/fc439f39-df02-49a5-9d57-a2d47077d723/image.png" alt=""> 
| --- | --- | --- |</p>
<blockquote>
<ul>
<li>공통적이고 정적인(변하지 않는) 정보의 복사본을 캐시(저장)하는 에지 노드 네트워크를 만드는 것이 훨씬 더 효율적일 것입니다.</li>
</ul>
</blockquote>
<ul>
<li>일반적인 정적 정보를 캐시하는 Google의 에지 노드 네트워크를 Google Global Cache 또는 GGC라고 합니다.</li>
<li>이를 Google CDN(Content Delivery Network)이라고도 합니다.</li>
</ul>
<br>

<hr>
<p>Udemy의 KubeFlow Bootcamp 강의를 통해 학습한 내용을 정리한 것입니다.
링크: <a href="https://www.udemy.com/course/kubeflow-bootcamp/">https://www.udemy.com/course/kubeflow-bootcamp/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[A Cloud Computing Overview]]></title>
            <link>https://velog.io/@all_young/A-Cloud-Computing-Overview</link>
            <guid>https://velog.io/@all_young/A-Cloud-Computing-Overview</guid>
            <pubDate>Sun, 20 Aug 2023 08:18:16 GMT</pubDate>
            <description><![CDATA[<h1 id="00-what-is-cloud">00. What is Cloud?</h1>
<h2 id="nist가-정의한-클라우드-컴퓨팅의-주요-특성-5가지">NIST가 정의한 클라우드 컴퓨팅의 주요 특성 5가지</h2>
<ul>
<li>On-demand self service</li>
<li>Broad Network Access</li>
<li>Resource Pooling</li>
<li>Rapid Elasticity</li>
<li>Measured Service</li>
</ul>
<br>

<h3 id="on-demand-self-service">On-demand self service</h3>
<blockquote>
<ul>
<li>사용자들은 관리자의 개입 없이 컴퓨팅 가용성을 자동으로 할당받을 수 있다.</li>
</ul>
</blockquote>
<ul>
<li>이때 컴퓨팅 가용성이란,<ul>
<li>서비스가 다운되지 않고 정상적으로 유지되는 것</li>
<li>컴퓨터 시스템 따위가 정상적으로 작동하여 사용될 수 있는 정도</li>
</ul>
</li>
</ul>
<h3 id="broad-network-access">Broad Network Access</h3>
<blockquote>
<ul>
<li>네트워크 기반으로 서비스에 접속할 수 있다.</li>
</ul>
</blockquote>
<ul>
<li>다양한 클라이언트에 의해 접속이 가능하다.<ul>
<li>즉 태블릿, 데스크 톱 등 여러 클라이언트로 접속이 가능해야한다.</li>
</ul>
</li>
</ul>
<h3 id="resource-pooling">Resource Pooling</h3>
<blockquote>
<ul>
<li>클라우드 제공자의 컴퓨팅 자원은 여러 사용자들을 서비스될 수 있도록 풀(Pool)로 관리된다.</li>
</ul>
</blockquote>
<ul>
<li>사용자의 컴퓨팅 자원은 독립적으로 존재한다.</li>
</ul>
<h3 id="rapid-elasticity">Rapid Elasticity</h3>
<blockquote>
<ul>
<li>사용자 요구에 대응하는 가용성이 유연하게 제공 또는 할당되어야한다.</li>
</ul>
</blockquote>
<h3 id="measured-service">Measured Service</h3>
<blockquote>
<ul>
<li>사용자이 자원 사용량에 대해 모니터링이 가능해야 한다.</li>
</ul>
</blockquote>
<br>

<hr>
<br>

<h1 id="01-why-use-cloud-computing">01. Why use cloud computing?</h1>
<h2 id="time-sharing">Time-Sharing</h2>
<blockquote>
<ul>
<li>컴퓨팅 리소스를 여러 사용자나 작업 간에 분할하여 공유하는 컴퓨터 시스템의 기술입니다.</li>
</ul>
</blockquote>
<ul>
<li>여러 사용자가 동시에 하나의 컴퓨터 시스템을 사용하도록 해주며, 각 사용자는 자신의 작업을 진행하면서 시스템 리소스를 나눠 가질 수 있습니다.</li>
<li>다중 사용자 환경에서 자원을 효율적으로 활용하고, 대용량 컴퓨팅 리소스를 경제적으로 활용할 수 있는 방법을 제공합니다.</li>
</ul>
<h2 id="virtualization">Virtualization</h2>
<blockquote>
<ul>
<li>하나의 물리적인 서버나 리소스를 여러 개의 가상 환경으로 분할하여 사용하는 기술입니다.</li>
</ul>
</blockquote>
<ul>
<li>서버 가상화는 하이퍼바이저(hypervisor)를 사용하여 가상 머신(VM)을 생성하고 관리하는 방식으로 동작합니다.</li>
<li>가상화를 통해 서버의 활용도를 높이고, 리소스의 격리와 관리를 개선하여 효율적인 IT 환경을 구축할 수 있습니다.</li>
</ul>
<h2 id="serverless">Serverless</h2>
<blockquote>
<ul>
<li>서버리스는 애플리케이션을 개발하고 실행하는 모델로, 개발자가 서버 인프라를 직접 관리하지 않아도 되는 형태입니다.</li>
</ul>
</blockquote>
<ul>
<li>개발자는 코드를 작성하고 이벤트 트리거에 의해 실행되는 함수(Function)를 정의하며, 클라우드 제공자가 관련 리소스의 배치와 확장을 자동으로 처리합니다.</li>
<li>서버리스는 애플리케이션 배포와 운영을 간소화하며, 요청에 따라 필요한 만큼만 리소스를 사용하여 비용을 절감할 수 있습니다.</li>
</ul>
<br>

<hr>
<ul>
<li>Udemy의 KubeFlow Bootcamp 강의를 통해 학습한 내용을 정리한 것입니다.</li>
<li>링크: <a href="https://www.udemy.com/course/kubeflow-bootcamp/">https://www.udemy.com/course/kubeflow-bootcamp/</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ CS ] 데이터베이스]]></title>
            <link>https://velog.io/@all_young/CS-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@all_young/CS-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Sun, 13 Aug 2023 13:59:57 GMT</pubDate>
            <description><![CDATA[<h1 id="데이터베이스">데이터베이스</h1>
<hr>
<h2 id="1-데이터-베이스의-기본">1. 데이터 베이스의 기본</h2>
<h3 id="q-데이터-베이스는-무엇인가요">Q. 데이터 베이스는 무엇인가요.</h3>
<p>데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터 모음</p>
<p>데이터베이스를 제어, 관리하는 통합 시스템을 DBMS</p>
<p>데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행</p>
<p>데이터베이스는 실시간 접근과 동시 공유가 가능</p>
<h3 id="q-sql">Q. SQL</h3>
<p>SQL은 RDBMS에서 데이터 조작, 관리, 쿼리하는 데 사용하는 프로그래밍 언어</p>
<p>SQL을 사용하여 데이터를 효율적으로 관리하고 유용한 정보를 추출하는 것</p>
<p>데이터베이스와 상호작용하여 데이터를 조작하고 쿼리하는 데 사용</p>
<p>데이터베이스에서 데이터를 추출하거나 저장, 수정, 삭제하는 등의 작업에 사용</p>
<p>SQL은 데이터 정의 언어와 쿼리 언어로 구성</p>
<ul>
<li>데이터 정의 언어 (Data Definition Language, DDL)<ul>
<li>데이터베이스, 테이블, 인덱스 등 데이터 구조를 생성, 수정, 삭제하는데 사용</li>
<li>대표적 DDL 문법<ul>
<li>CREATE: 데이터베이스, 테이블, 인덱스 등 생성</li>
<li>ALTER: 데이터베이스 or 테이블 구조 변경</li>
<li>DROP: 데이터베이스, 테이블, 인덱스 등 삭제</li>
</ul>
</li>
</ul>
</li>
<li>쿼리 언어 (Data Manipulation Language, DML)<ul>
<li>데이터베이스에서 데이터 검색, 삽입, 수정, 삭제하는데 사용</li>
<li>대표적인 DML 문법<ul>
<li>SELECT: 데이터 조회</li>
<li>INSERT: 테이블에 새로운 레코드 삽입</li>
<li>UPDATE: 테이블의 레코드 수정</li>
<li>DELETE: 테이블에서 레코드 삭제</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="q-키">Q. 키</h3>
<p>데이터베이스에서 데이터를 효율적으로 검색, 정렬 및 관리하기 위해 중요한 역할</p>
<ul>
<li><p>유일성: 중복되는 값이 없음.</p>
</li>
<li><p>최소성: 필드를 조합하기 않고 최소 필드만 써서 키를 형성할 수 있는 것.</p>
</li>
<li><p>기본 키</p>
<ul>
<li>유일성과 최소성 만족</li>
<li>테이블의 각 레코드를 고유하게 식별하는 역할</li>
</ul>
</li>
<li><p>대체 키</p>
<ul>
<li>유일성과 최소성 만족</li>
<li>레코드를 식별할 수 있지만 기본키로 선택되지 않은 것</li>
</ul>
</li>
<li><p>후보 키</p>
<ul>
<li>유일성과 최소성 만족</li>
<li>후보 키 = 기본 키 + 대체 키</li>
<li>기본 키로 선택될 수 있는 모든 키</li>
</ul>
</li>
<li><p>외래 키</p>
<ul>
<li>다른 테이블의 기본키를 그대로 참조하는 값</li>
<li>두 테이블간의 일관성 유지</li>
</ul>
</li>
<li><p>슈퍼 키</p>
<ul>
<li>유일성 만족</li>
<li>하나 이상의 필드로 구성된 키로, 레코드들을 식별할 수 있는 것</li>
</ul>
</li>
<li><p>복합 키</p>
<ul>
<li>두 개 이상의 필드로 구성된 키로, 레코드들을 식별할 수 있는 것</li>
</ul>
</li>
</ul>
<hr>
<h2 id="2-erd와-정규화">2. ERD와 정규화</h2>
<h3 id="q-erd-entity-relationship-diagram">Q. ERD (Entity Relationship Diagram)</h3>
<p>개체(Entity)와 관계(Relationship)를 중점적으로, 데이터베이스 구조 이해하기 위해 그리는 다이어그램</p>
<h3 id="q-정규화">Q. 정규화</h3>
<p>릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나 이를 해결하기 위함</p>
<p>저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정</p>
<ul>
<li><p>제 1 정규형(First Normal Form, <em>1NF</em>)</p>
<ul>
<li><p>테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/9e0be6d5-7c21-4018-95bc-bd308dfaaf54/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>제 2 정규형(Second Normal Form, <em>2NF</em>)</p>
<ul>
<li><p>테이블의 모든 컬럼이 완전 함수적 종속을 만족</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/e8b57a8b-d3d0-4cc5-bf5e-f8dd5d0080a2/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>제 3 정규형(Third Normal Form, <em>3NF</em>)</p>
<ul>
<li><p>어떠한 테이블에 존재하는 key가 아닌 필드들이 서로 독립적</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/5ac279c3-2c1e-42a7-a9ec-288bf240dc0f/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>BCNF(Boyce-Codd Normal Form)</p>
<ul>
<li>어떠한 테이블에 대해 테이블에 존재하는 모든 함수 종속 관계의 Determinant가 Candidate key</li>
<li>함수 종속 관계를 만족하는 것은 Determinant 항목이자 Candidate key에 해당</li>
</ul>
</li>
<li><p>제 4 정규형(Fourth Normal Form, <em>4NF</em>)</p>
<ul>
<li>4NF는 MVD(Multivalued Dependency)라는 개념을 통해 정의</li>
<li>MVD는 functional dependency의 일반화된 개념<ul>
<li>functional dependency에서는 determinant X에 의해 Y의 값이 하나만 결정되었다면, MVD에서는 determinant X에 의해 다수의 Y값이 결정된다. 위와 같은 MVD 관계는 X →→ Y로 표기한다.</li>
</ul>
</li>
<li>MVD의 종류<ul>
<li>Trivial MVD : Y가 X의 부분집합이거나, X와 Y를 합한 것이 테이블 그 자체인 경우 (X U Y = R)</li>
<li>Nontrivial MVD : 위에서 정의된 trivial MVD가 아닌 모든 MVD</li>
</ul>
</li>
</ul>
</li>
<li><p>제 5 정규형(Fifth Normal Form, <em>5NF</em>)</p>
<ul>
<li>5NF는 어떠한 테이블이 오직 테이블의 Candidate key를 포함하는 부분집합에 의해서만 Join Dependency가 성립되는 것</li>
<li>어떠한 테이블 필드들의 부분집합을 포함하는 테이블들을 JOIN 하여 작성하면, 테이블 T는 join dependency를 갖는다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="3-트랜잭션과-무결성">3. 트랜잭션과 무결성</h2>
<h3 id="q-트랜잭션">Q. 트랜잭션</h3>
<p>데이터베이스에서 한 번에 수행되어야 하는 하나 이상의 작업을 묶은 논리적인 작업 단위</p>
<ul>
<li>원자성 (Atomicity): 한 트랜잭션 내에서 실행한 작업들은 하나의 작업으로 간주. 모두 성공 또는 실패</li>
<li>일관성 (Consistency): 트랜잭션이 완료되면 데이터베이스는 일관된 상태를 유지</li>
<li>격리성 (Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리</li>
<li>지속성 (Durability): 트랜잭션에서 성공적으로 완료된 변경 사항은 영구적으로 데이터베이스에 반영</li>
</ul>
<h3 id="q-무결성">Q. 무결성</h3>
<p>데이터의 정확성, 일관성, 유효성을 유지하는 것.</p>
<ul>
<li>개체 무결성: 기본 키의 필드 값은 Null 허용하지 않음.</li>
<li>참조 무결성: 참조 관계인 두 테이블은 항상 일관된 값 유지.</li>
<li>고유 무결성: 특정 속성에 대해 각 튜플의 값이 달라야 하는 조건이 주어지면 달라야 함. Unique</li>
<li>Null 무결성: 특정 속성 값에 Null이 올 수 없다는 조건이 주어지면 Null 못옴</li>
</ul>
<hr>
<h2 id="4-데이터베이스의-종류">4. 데이터베이스의 종류</h2>
<table>
<thead>
<tr>
<th></th>
<th>SQL</th>
<th>NoSQL</th>
</tr>
</thead>
<tbody><tr>
<td>데이터 모델</td>
<td>관계형 데이터베이스 모델을 사용. 데이터는 테이블로 구성되며, 각 테이블은 정해진 스키마에 따라 열(필드)로 구성</td>
<td>다양한 데이터 모델을 사용. 주요한 모델로는 문서(Document), 키-값(Key-Value), 열(Column-Family), 그래프(Graph) 등. 스키마가 유연하며, 각각의 문서나 항목은 고유한 구조</td>
</tr>
<tr>
<td>쿼리 언어</td>
<td>SQL 사용하여 데이터를 쿼리하고 조작</td>
<td>각각의 모델에 맞는 쿼리 언어를 사용</td>
</tr>
<tr>
<td>확장성</td>
<td>수평적 확장 어렵고, 주로 수직적 확장으로 운영. 즉, 하드웨어 성능을 높이는 방식으로 확장.</td>
<td>수평적 확장 가능. 클러스터를 추가하여 확장하거나 분산 데이터베이스로 운영.</td>
</tr>
<tr>
<td>일관성과 트랜잭션</td>
<td>ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션을 지원하여 데이터 일관성과 안정성 보장</td>
<td>일관성과 트랜잭션에 대한 지원 정책 다양. 몇몇 NoSQL 데이터베이스는 분산 환경에서 일관성을 보장하지 않는 CP(일관성, 분할 허용성) 모델을 따르기도 하며, 다른 일부 데이터베이스는 AP(가용성, 분할 허용성) 모델을 따릅니다.</td>
</tr>
<tr>
<td>스키마 설계</td>
<td>스키마 미리 정의, 데이터 구조 변경하기 어렵.</td>
<td>스키마 유연하므로, 데이터 구조 변경 상대적 간단</td>
</tr>
<tr>
<td>활용성</td>
<td>정형화된 데이터와 강력한 트랜잭션을 요구하는 경우에 적합</td>
<td>비정형화된 데이터와 빠른 확장이 필요한 경우에 유용</td>
</tr>
</tbody></table>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[MLOps 개념과 필요성 : MLOps의 핵심 기능]]></title>
            <link>https://velog.io/@all_young/MLOps-%EA%B0%9C%EB%85%90%EA%B3%BC-%ED%95%84%EC%9A%94%EC%84%B1-MLOps%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EB%8A%A5</link>
            <guid>https://velog.io/@all_young/MLOps-%EA%B0%9C%EB%85%90%EA%B3%BC-%ED%95%84%EC%9A%94%EC%84%B1-MLOps%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EB%8A%A5</guid>
            <pubDate>Sun, 06 Aug 2023 06:31:58 GMT</pubDate>
            <description><![CDATA[<h2 id="chapter-3-mlops의-핵심-기능"><strong>CHAPTER 3 MLOps의 핵심 기능</strong></h2>
<p>MLOps의 다섯가지 핵심 기능인 개발, 배포, 모니터링, 반복, 거버넌스를 소개한다.</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/a1fa177e-2100-4f57-b2e8-334e47aa1fb2/image.png" alt="출처: Compunnel Digital"></p>
<br>

<hr>
<h2 id="31-머신러닝-입문"><strong>3.1 머신러닝 입문</strong></h2>
<p>머신러닝은 컴퓨터 알고리즘의 총아로서, 명시적으로 프로그래밍되기보다는 자동으로 경험으로부터 배우고 성능을 개선한다.</p>
<p>알고리즘을 활용하여 학습 데이터라고도 불리는 표본 데이터를 분석하고, 예측을 수행하는 소프트웨어 모델을 구축한다.</p>
<br>

<hr>
<h2 id="32-모델-개발"><strong>3.2 모델 개발</strong></h2>
<h3 id="321-비즈니스-목표-수립"><strong>3.2.1 비즈니스 목표 수립</strong></h3>
<p>비즈니스 목표는 당연히 성능 목표, 기술 인프라 요구사항, 비용 제약을 포함한다. </p>
<p>이러한 요소들은 모두 KPI로 선정할 수 있고, 상용 환경에서 모델의 비즈니스 성능 측정을 위한 모니터링 대상이 될 수 있다.</p>
<p>목표 설정시 변화 관리도 포함하여, 머신러닝 모델이 어떻게 구축되어야 하는지에 대한 가이드를 제공해야할 수도 있다.</p>
<br>

<h3 id="322-데이터-소스-및-탐색적-데이터-분석"><strong>3.2.2 데이터 소스 및 탐색적 데이터 분석</strong></h3>
<p>머신러닝 모델 구축을 위해 데이터를 찾기 위한 핵심 질문은 다음과 같다.</p>
<ul>
<li>관련 데이터 세트 중 어떤 것을 사용할 수 있는가?</li>
<li>이 데이터는 충분히 정확하고 신뢰할 수 있는가?</li>
<li>이해관계자들이 이 데이터레 접근할 권한이 있는가?</li>
<li>여러 개의 데이터 소스를 조합 하여 어떤 데이터 속성 또는 특성을 만들어낼 수 있는가?</li>
<li>이 데이터는 실시간으로 얻을 수 있는가?</li>
<li>데이터 중 일부를 &#39;실측 데이터&#39;로 레이블링해야 하는가, 아니면 비지도 학습으로 충분한가? 만약 레이블링해야 한다면 시간과 자원 측면에서 비용이 얼마나 드는가?</li>
<li>어떤 플랫폼을 사용해야 하는가?</li>
<li>모델을 배포한 후 데이터를 어떻게 갱신할 것인가?</li>
<li>모델을 사용하면 오히려 데이터의 대표성을 해칠 수 있는가?</li>
<li>비즈니스 목표와 함께 정의한 KPI를 어떻게 측정할 것인가?</li>
</ul>
<br>

<p>데이터는 머신러닝 알고리즘의 근본요소이다.</p>
<br>

<p>탐색점 데이터 분석(EDA) 기법을 통해 데이터에 대한 가정을 세우고, 데이터 정제 시 필요한 사항을 확인하고, 의미가 있을 것으로 추정되는 특성을 선택한다.</p>
<br>

<h3 id="323-특성-엔지니어링-및-특성-선택"><strong>3.2.3 특성 엔지니어링 및 특성 선택</strong></h3>
<p>특성 엔지니어링은 선택한 데이터 세트들에서 원시 데이터를 취득하고 문제를 해결하는 데 더 적합한 &#39;특성&#39;으로 전환하는 절차다.</p>
<br>

<h3 id="324-학습-및-평가"><strong>3.2.4 학습 및 평가</strong></h3>
<p>새로운 머신러닝 모델을 학습시키고 최적화하는 절차는 반복적이다.</p>
<br>

<h3 id="325-재현-가능성"><strong>3.2.5 재현 가능성</strong></h3>
<p>모델의 중요한 버전은 나중을 위해 저장해둬야 한다.</p>
<p>머신러닝의 목표는 모델을 개발한 환경에 대한 정보를 충분히 저장하여 동일한 결과를 보이는 모델을 처음부터 다시 만들어내는 것이다.</p>
<p>확실하게 재현 가능성을 확보하려면, 모든 자산과 매개변수를 버전 관리해야 하고, 모델의 학습과 검증에 사용한 데이터와 소프트웨어 환경 또한 버전 관리해야 한다.</p>
<br>

<h3 id="326-책임-있는-ai"><strong>3.2.6 책임 있는 AI</strong></h3>
<p>학습된 모델에 대한 문서를 자동으로 생성하는 도구를 활용하여 모델 문서 작성을 자동화할 경우 작업 부담을 줄일 수 있다.</p>
<p>모델의 정상 여부를 검사하거나 특성 엔지니어링을 더 잘 수행하기  위해서는 그 &#39;어떻게&#39;가 중요하다.</p>
<p>데이터의 공정성이 요구사항인 경우, 요구된 공정성을 달성했는지 확인하는 과정에서도 &#39;어떻게&#39;가 필요하다.</p>
<br>

<hr>
<h2 id="33-제품화-및-배포"><strong>3.3 제품화 및 배포</strong></h2>
<p>모델의 제품화와 배포는 MLOps의 핵심 요소로서, 모델 개발과는 기술적으로 완전히 다른 과제다.</p>
<br>

<h3 id="331-모델-배포-유형과-내용"><strong>3.3.1 모델 배포 유형과 내용</strong></h3>
<p>Model-as-a-service 혹은 실시간-스코어링 모델(Live-scoring Model)</p>
<ul>
<li>REST API endpoint를 제공하는 간단한 프레임워크에 모델을 배포하고, 실시간으로 요청에 응답한다.</li>
</ul>
<p>임베디드 모델(Embedded Model)</p>
<ul>
<li>모델을 애플리케이션 내에 패키징하여 게시한다.</li>
</ul>
<p>컨테이너화</p>
<ul>
<li>애플리케이션이 독립적이고 독자적인 환경에 배포되도록 하고 각 모델의 정확한 요구사항을 만족시킨다.</li>
<li>블루-그린 배포 기법을 활용하여 새로운 모델을 원활하게 배포할 수 있다.</li>
<li>모델을 위한 컴퓨팅 자원을 확장할 수 있다.</li>
<li>여러 개의 컨테이너에 대한 오케스트레이션은 쿠버네티스와 같은 기술들을 활용하여 수행하는데, 클라우드와 온프레미스 양쪽 모두에서 활용 가능하다.</li>
</ul>
<br>

<h3 id="332-모델-배포-요구사항"><strong>3.3.2 모델 배포 요구사항</strong></h3>
<p>모델의 최대 자원 요구 수준을 리눅스 cqroups과 같은 기술을 활용하여 안전하게 달성할 수 있는 경우에는, 완전 자동화하여 하나의 단계로 이루어진 푸시-투-프로덕션 방식이 적합하다.</p>
<br>

<hr>
<h2 id="34-모니터링"><strong>3.4 모니터링</strong></h2>
<h3 id="341-devops의-관심사"><strong>3.4.1 DevOps의 관심사</strong></h3>
<ul>
<li>모델이 작업을 충분히 빠르게 처리하는가?</li>
<li>적절한 용량의 메모리와 CPU 처리 시간을 사용하고 있는가?</li>
</ul>
<br>

<h3 id="342-데이터-과학자의-관심사"><strong>3.4.2 데이터 과학자의 관심사</strong></h3>
<p>현실 세계는 계속 변화한다. 6개월 전에 이상거래 탐지 모델 구축 시 사용한 학습 데이터는 최근 3개월 내에 발생하기 시작한 새로운 형태의 사기를 반영하지 않는다.</p>
<p>얼마나 자주 모델을 재학습시켜야 하는가는 얼마나 빨리 현실 세계가 변하고 모델은 얼마나 정확해야 하는가에 달려 있다.</p>
<p><strong>실측데이터</strong></p>
<p>실측 데이터는 모델이 풀어야 하는 질문에 대한 정답이다.</p>
<p><strong>입력값 드리프트</strong></p>
<p>학습 데이터가 현실 세계를 정확히 반영하고 있다면 모델도 정확하게 예측할 것이라는 가정을 기반으로 한다.</p>
<p>배포된 모델에 대한 최근 요청에 큰 변화가 있다면, 모델 성능이 크게 떨어졌을 가능성이 높다.</p>
<br>

<h3 id="343-비즈니스-관심사"><strong>3.4.3 비즈니스 관심사</strong></h3>
<ul>
<li>모델이 기업에 가치가 있는가?</li>
<li>모델로 얻을 수 있는 이점이 모델을 개발하고 배포할 때 필요한 비용을 넘어서는가? (또한 이 이점이나 비용은 어떻게 측정할 수 있는가?)</li>
</ul>
<p>돈으로 환산할 수 있는 수단이 없다면, 가장 좋은 선택지는 비즈니스 KPI를 효과적으로 모니터링하는 것이다.</p>
<br>

<hr>
<h2 id="35-반복-및-생애주기"><strong>3.5 반복 및 생애주기</strong></h2>
<p>모델의 새 버전을 개발해야 하는 이유는 모델 드리프트로 인한 모델 성능 저하다. 때로는 재정의한 비즈니스 목표 및 KPI를 반영해야 할 수도 있다.</p>
<br>

<h3 id="351-반복"><strong>3.5.1 반복</strong></h3>
<p>최신 학습 데이터로 기존 모델을 재학습시키는 방식은 새 버전 개발을 반복하기 위한 가장 간단한 방식이다.</p>
<ul>
<li>새 학습 데이터의 모습이 기대한 대로 나타나는가? 새 데이터를 자동화된 검증 방식과 사전 정의된 지표와 검사로 확인해야 한다.</li>
<li>데이터가 완전하고 일관성이 있는가?</li>
<li>특성의 분포가 대체로 기존 학습 데이터 세트와 유사한가? 목표는 모델의 개선이지 뒤집어 엎는 것이 아님을 기억해야 한다.</li>
</ul>
<p>모델의 새 버전을 구축하고 나면, 다음 단계는 현재 배포된 버전과 지표를 기반으로 비교하는 것이다. 이 과정에서 두 모델을 동일한 개발용 데이터 세트로 평가해야 한다.</p>
<p>새 학습 데이터로 아주 &#39;간단한&#39; 자동화된 재학습 시나리오를 수행하더라도, 스코어링 데이터 보정, 데이터 정리 및 검증을 거친 여러 벌의 데이터 세트, 모델의 이전 버전, 신중하게 설계한 검사들이 필요하다.</p>
<br>

<h3 id="352-피드백-루프"><strong>3.5.2 피드백 루프</strong></h3>
<p>불확실성을 경감시키기 위한 한 가지 방법으로 섀도우 테스트가 있다.</p>
<p>모델의 새 버전을 기존 모델과 함께 라이브 환경에 배포한다.</p>
<p>모든 실시간 스코어링은 기존 버전으로 처리하되, 새 버전에서 다시 처리하고 결과를 로그로 남긴다.</p>
<p>양쪽 버전에서 모두 충분히 스코어링하고 나면, 통계적으로 결과를 비교한다.</p>
<br>

<p>A/B 테스트에서는 기존 모델과 새 모델을 모두 라이브 환경에 배포한다.</p>
<p>입력값인 요청을 두 모델에 나눠서 전달한다.</p>
<p>각 요청은 기존 모델 혹은 새 모델에서 처리하고, 양쪽 모두에서 처리하지는 않는다.</p>
<br>

<p>멀티-암드 밴딧 테스트는 적응형이다.</p>
<p>입력값을 전달할 모델을 실제 결과에 따라 조정하여 결정하기 때문에 낮은 성능을 보이는 모델에는 입력값을 덜 전달하게 된다.</p>
<p>A/B 테스트에 비해 좀 더 복잡하지만, 성능이 떨어지는 모델로 트래픽을 전달하여 발생하는 비즈니스 비용을 절감할 수 있다.</p>
<br>

<hr>
<h2 id="36-거버넌스"><strong>3.6 거버넌스</strong></h2>
<p>비즈니스에 대한 일련의 통제이다.</p>
<p>모든 이해관계자에 대한 의무 사항을 수행하는 것이다.</p>
<p>의무 사항으로는 금융, 법률, 윤리적 의무가 있다.</p>
<p>MLOps에서 거버넌스 이니셔티브는 두 가지 범주 중 하나로 귀결된다.</p>
<ul>
<li>데이터 거버넌스<ul>
<li>데이터의 적절한 사용 및 관리를 보장하는 프레임워크를 의미한다.</li>
</ul>
</li>
<li>프로세스 거버넌스<ul>
<li>모든 거버넌스 고려 사항이 머신러닝 모델 생애주기 중 정확한 지점에서 다루어지도록, 완전하고 정확한 기록이 유지되도록 잘 정의된 프로세스를 의미한다.</li>
</ul>
</li>
</ul>
<br>

<h3 id="361-데이터-거버넌스"><strong>3.6.1 데이터 거버넌스</strong></h3>
<ul>
<li>데이터의 출처가 어떻게 되는가?</li>
<li>원본 데이터는 어떤 사용 약관에 따라 어떻게 수집했는가?</li>
<li>데이터는 정확하고 최신인가?</li>
<li>사용하면 안 되는 개인 식별 정보나 다른 민감한 데이터가 있는가?</li>
<li>데이터 세트 내의 정보는 어디서 왔고, 사용 방법에 대해 무엇을 알 수 있는가?</li>
<li>이 데이터는 어떻게 사용되고 있는가? 어떤 식으로든 수정한다면 이후 어떤 일이 일어날 것인가?</li>
</ul>
<br>

<h3 id="362-프로세스-거버넌스"><strong>3.6.2 프로세스 거버넌스</strong></h3>
<p>MLOps 프로세스 내 각 단계를 공식화하고 관련 작업을 정의하는 데 중점을 둔다.</p>
<ul>
<li>모든 거버넌스 관련 고려 사항이 정확한 시점에 이루어지고 정확하게 수행되는지 확인한다. 예를 들어, 모델은 모든 유효성 검사를 통과해야만 상요 배포될 수 있다.</li>
<li>MLOps 프로세스 외부의 감독을 받을 수 있게 한다. 감리인, 리스크 관리자, 규정 준수 책임자를 비롯해 조직 전체가 현황을 추적하고 이후 단계에서 기존 의사결정들을 검토할 수 있는지에 관심을 둔다.</li>
</ul>
<br>

<hr>
<br>

<p>본 글은 데이터이쿠의 &lt; MLOps 도입 가이드 - 기업에서 머신러닝 모델을 가장 효율적을 운영하는 방법&gt;을 읽고 중요하다고 생각되는 부분을 정리한 것 입니다.</p>
<p><a href="https://product.kyobobook.co.kr/detail/S000001810502">https://product.kyobobook.co.kr/detail/S000001810502</a></p>
<p> <a href="https://product.kyobobook.co.kr/detail/S000001810502">MLOps 도입 가이드 | 데이터이쿠 - 교보문고 MLOps 도입 가이드 | MLOps의 개념부터 도입과 활용까지, 성공적인 머신러닝 운영화를 위한 실용 가이드!오늘날 데이터 사이언스와 AI는 IT 분야뿐 아니라 제조, 구매, 유통, 마케팅, 반도체, 자동차,product.kyobobook.co.kr</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ICT 학점연계 프로젝트 인턴십 지원 및 합격 후기]]></title>
            <link>https://velog.io/@all_young/ICT-%ED%95%99%EC%A0%90%EC%97%B0%EA%B3%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%9D%B8%ED%84%B4%EC%8B%AD-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@all_young/ICT-%ED%95%99%EC%A0%90%EC%97%B0%EA%B3%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%9D%B8%ED%84%B4%EC%8B%AD-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Mon, 24 Jul 2023 21:35:20 GMT</pubDate>
            <description><![CDATA[<h1 id="ict-학점연계-프로젝트-인턴십-소개-">ICT 학점연계 프로젝트 인턴십 소개 .</h1>
<h3 id="ict-학점연계-프로젝트-인턴십이란">ICT 학점연계 프로젝트 인턴십이란?</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/e4927992-4ac3-4cd3-b01c-41c478763fd9/image.png" alt=""></p>
<h3 id="주요-내용">주요 내용</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/9712df48-2177-47ea-9a7d-025f38d0325d/image.png" alt=""></p>
<h3 id="사업-체계">사업 체계</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/ee51c607-abc5-4059-a6f3-72585a2bfd52/image.png" alt=""></p>
<h3 id="링크">링크</h3>
<p><a href="https://www.ictintern.or.kr/main.do">https://www.ictintern.or.kr/main.do</a><br><br>
<br></p>
<hr>
<h1 id="지원-동기-">지원 동기 .</h1>
<h4 id="1-현재-졸업-학점까지-9학점-정도-남은-상태이며-9학점을-학교-수업으로-활용하며-4개월을-보내고-싶지-않았다">1. 현재 졸업 학점까지 9학점 정도 남은 상태이며, 9학점을 학교 수업으로 활용하며 4개월을 보내고 싶지 않았다.</h4>
<h4 id="2-실질적인-실무-프로젝트에-대한-경험을-쌓으며-기술-스택-및-심도있는-개발을-진행해보고-싶었다">2. 실질적인 실무 프로젝트에 대한 경험을 쌓으며, 기술 스택 및 심도있는 개발을 진행해보고 싶었다.</h4>
<h4 id="3-그래서-4개월을-어떻게-해야-밀도있게-활용할-수-있을까-고민하던-중-발견한-것이-ict-학점-연계-프로젝트-인턴십이다">3. 그래서 4개월을 어떻게 해야 밀도있게 활용할 수 있을까 고민하던 중 발견한 것이 ICT 학점 연계 프로젝트 인턴십이다.</h4>
<br>
<br>

<hr>
<h1 id="어디에-지원했는가-">어디에 지원했는가 .</h1>
<blockquote>
<p>인턴십 지원은 최대 3곳을 할 수 있음.</p>
</blockquote>
<h3 id="1-ai-및-클라우드-기반으로-금융-서비스-개발-기업">1. AI 및 클라우드 기반으로 금융 서비스 개발 기업</h3>
<p>지원 이유는?
금융 분야에 대한 취업을 사실 선호하고 있는 상태.
따라서 금융 실무 프로젝트를 경험해보고 싶어서 지원했다.<br>
요약: 금융 분야 취업을 선호하기 때문에, 유사 경험할 수 있는 기업 지원</p>
<br>


<h3 id="2-ml-워크플로우-플랫폼-개발-기업">2. ML 워크플로우 플랫폼 개발 기업</h3>
<p>지원 이유는?
나의 커리어의 최종 목적은 MLOps 엔지니어이다.
<del>이후 미래 기술 발전 흐름에 따라 바뀐 수 있음.</del>
따라서 MLOps 엔지니어의 필요 역량인, ML 모델 파이프라인 구축에 대해 배워보고 싶었다.</p>
<p>요약: 배우고 싶은 분야이기 때문에, 커리어 발전을 위해 지원</p>
<br>

<h3 id="3-mldl-기반으로-최적화-알고리즘-및-예측-솔루션-개발-기업">3. ML/DL 기반으로 최적화 알고리즘 및 예측 솔루션 개발 기업</h3>
<p>지원 이유는?
기존에 데이터 사이언스에 대해 공부해왔으며,
포트폴리오의 대다수의 프로젝트가 데이터분석/AI 모델링이다.
따라서, 이력서 및 포트폴리오 기반으로 붙을 가능성이 높다고 생각.</p>
<p>요약: 인턴십이 붙을 확률이 높은 기업 지원
<br>
<br></p>
<hr>
<h1 id="준비-과정-">준비 과정 .</h1>
<h2 id="매칭-프로세스">매칭 프로세스</h2>
<blockquote>
<p>2023년 하반기 ICT 인턴십 기준
<img src="https://velog.velcdn.com/images/all_young/post/2cac072b-5e12-458b-9672-9776657c222d/image.png" alt=""></p>
</blockquote>
<h2 id="온라인-코딩-테스트-준비-과정">온라인 코딩 테스트 준비 과정</h2>
<p>사실 코딩 테스트를 따로 준비한 건 아니다.
작년에 준비했던 경험과 평소에 코딩 해오던 실력 기반으로 테스트에 임했다.</p>
<h2 id="서류-전형-준비-과정">서류 전형 준비 과정</h2>
<p>정말정말 공들여서 준비했다.
우선, 서류는 크게 <strong>이력서 + 자기소개서 + 포트폴리오</strong>로 구성했다.</p>
<p><strong>이력서,</strong> 
프로그래머스 등의 플랫폼을 사용하지 않고 미리 캔버스 이용해서 나만의 이력서 만들었다.
이유는 타 플랫폼의 템플릿이 완벽하게 맘에 들지 않았으며,
나의 장점을 부각시키기 위해 이력서에 들어갈 요소들을 재배치하고 싶었기 때문.</p>
<p><strong>자기소개서,</strong>
나를 나타내는 키워드 4가지로 정리하였고,
그 키워드가 나를 왜 나타내는지와 실제 사례를 통해 나에 대한 이미지를 강조하였다.
자기소개서 같은 경우는 A4 한 페이지 안에 담았다.</p>
<p><strong>포트폴리오,</strong> 
이력서에 내용을 더 상세하게 풀어썼으며,
특히 프로젝트에 대한 소개 및 피피티 자료, 결과물, 나의 역할 등에 대해 정리하였다.
포트폴리오는 노션으로 정리하였다.</p>
<h2 id="면접-전형-준비-과정">면접 전형 준비 과정</h2>
<p>면접 준비도 크게 3가지로, <strong>자기소개 및 인성 질문, 이력서 기반 기술 질문, 회사에 대한 조사</strong>로 나눠서 했다.</p>
<p><strong>우선 자기소개 및 인성 질문,</strong>
자기소개는 나의 소개 + 지원 동기 + 내가 해온 프로젝트(커리어) 요약 + 입사 후 포부로 준비했다.</p>
<p><strong>이력서 기반 기술 질문,</strong> 
내 이력서와 포트폴리오를 보면서,
각 프로젝트에 대한 소개, 과정, 결과를 정리해서 외웠고,
프로젝트에 쓰인 기술 스택 또는 방법론에 대해서 타당성 기반으로 준비해갔다.</p>
<p>또한, 기업에서 요구하는 기술 지식에 대해 조사하여 
질문이 들어올 때 답변할 수 있을 정도로 준비했다.</p>
<p><strong>회사에 대한 조사,</strong>
회사의 비전은 무엇인지 ( = 앞으로 방향성은 무엇인지),
회사가 운영하고 있는 서비스가 무엇이며,
그리고 회사의 채용공고를 찾아보며 어떤 사람을 찾고 있는지,
등등을 조사해갔다.
<br>
<br></p>
<hr>
<h1 id="코딩-테스트-후기-">코딩 테스트 후기 .</h1>
<p>영어로 된 지문이었으며, 총 5문제가 출제되었다.
각 문제당 테스트 케이스는 12개가 있었다.</p>
<p>아래는 실제 코딩 테스트 결과를 메일로 전달받은 것이다.
문제와 답변을 같이 전달받았지만,
혹시 외부로 공유했을 때 문제가 될 수 있어서 결과만 블로그에 올리기로 했다.
<img src="https://velog.velcdn.com/images/all_young/post/c48d726b-0551-4306-b7a6-419f3fb50a4d/image.png" alt=""></p>
<p><del>첫번째 문제가 가장 쉬운 건데 왜이리 오래 걸린지 모르겠다.
접근 방식에서 꼬인 것 같다.</del>
<br>
<br>
<br></p>
<hr>
<h1 id="면접-후기-">면접 후기 .</h1>
<p>모든 곳의 면접 내용이 다 기억나지는 않지만, 
기억나는 질문들을 정리하면 다음과 같다.</p>
<ul>
<li><p>자기소개는 필수</p>
</li>
<li><p>이전에 진행했던 인턴십에 대한 질문</p>
<ul>
<li>인턴십 프로젝트에 대한 소개</li>
<li>고객의 불편사항을 해소하기 위해 기존 서비스를 개선했다고 했는데 불편사항이 있었다는 객관적인 지표가 실제로 있었는지</li>
<li>프로젝트에 사용한 기술 스택을 선정한 이유는 무엇이었는지</li>
<li>데이터는 어떤 것을 사용했으면, 그 데이터가 배치 기반인지 스트리밍 데이터였는지</li>
<li>병렬처리를 고려해서 개발하였는지 </li>
<li>등등</li>
</ul>
</li>
<li><p>프로젝트에 대한 소개</p>
<ul>
<li>프로젝트를 간략하게 소개하고 사용한 기술 스택에 대한 설명</li>
<li>최적 입지 분석을 했는데, 그에 대한 평가(타당성)은 어떻게 설명할 것 인지</li>
<li>개인화 추천 시스템 프로젝트가 있는데, 프로세스가 어떻게 되는가</li>
<li>본인이 사용한 기술의 정확한 원리(알고리즘)을 알고 있는지</li>
</ul>
</li>
<li><p>기타 기술 질문</p>
<ul>
<li>가장 자신 있는 ML 알고리즘 하나 말해주고, 그 동작 원리를 설명해주세요.</li>
</ul>
</li>
<li><p>마지막으로 하고 싶은 말 있는가 </p>
</li>
<li><p>또는 회사에 궁금한 점 있는가</p>
<br>
<br>
<br>

</li>
</ul>
<hr>
<h1 id="그래서-결론-">그래서 결론 .</h1>
<h3 id="1-ai-및-클라우드-기반으로-금융-서비스-개발-기업-1">1. AI 및 클라우드 기반으로 금융 서비스 개발 기업</h3>
<h4 id="서류-전형---합격">서류 전형 -&gt; 합격</h4>
<h4 id="면접-전형---불참-했음">면접 전형 -&gt; 불참 했음</h4>
<br>
불참 이유는?

<p>학점 연계 인턴십 관련으로 졸업 요건 알아보다가,
학교 현장 실습 지원 센터와 ICT 인턴십 관련으로 해결해야 하는 게 있었고,
이 부분이 해결되지 않으면, ICT 학점 연계 붙어도 졸업이 연기될 수 있다는 걸 깨달았다.
그리고 결론적으로 해결이 되지 않았다.
그래서 안갔다,,</p>
<p>개인 사정으로 면접 불참할 것 같다고 말씀드렸는데,
밑에처럼 메일이 왔다.</p>
<p>너무나도 감사하다. 정말.
아쉽다 정말로,,</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/bb8ebed1-f05f-4676-96e0-a25691852fd6/image.png" alt=""><img src="https://velog.velcdn.com/images/all_young/post/d76c1936-03db-4697-a0eb-638d7126caa6/image.png" alt=""></p>
<br>

<h3 id="2-ml-워크플로우-플랫폼-개발-기업-1">2. ML 워크플로우 플랫폼 개발 기업</h3>
<h4 id="서류-전형---합격-1">서류 전형 -&gt; 합격</h4>
<h4 id="면접-전형---불합격">면접 전형 -&gt; 불합격</h4>
<p>내가 예상하는 불합격 이유?
관련 기술 능력이 부족해서.
면접을 볼때, 느낌상 백엔드 직무를 그동안 해왔던 사람을 원하는 분위기였다.
음, 백엔드 능력이 있고 + ML/DL에 대한 배경 지식이 있는 사람을 원하는 느낌? 이었다.
나는 그 반대였다.
ML/DL 모델링 능력이 있고 + 백엔드에 대한 배경 지식이 있는 상태.
조금 더 면접 때 어필을 해볼걸 이라는 아쉬움은 있다.</p>
<br>

<h3 id="3-mldl-기반으로-최적화-알고리즘-및-예측-솔루션-개발-기업-1">3. ML/DL 기반으로 최적화 알고리즘 및 예측 솔루션 개발 기업</h3>
<h4 id="서류-전형---합격-2">서류 전형 -&gt; 합격</h4>
<h4 id="면접-전형---합격">면접 전형 -&gt; 합격</h4>
<p>근데 위에 언급했던 이유로,
결론은 ICT 인턴십 참여를 못한다 ㅜㅜ
최종 합격인데 아쉽다..</p>
<blockquote>
<p>2023년 7월 25일 오전 6시 19분 기준, 매칭 결과
<img src="https://velog.velcdn.com/images/all_young/post/67250e56-665a-4975-ab4f-885f425bcfca/image.png" alt="">
2023년 7월 28일 오후 3시 27분 기준, 인턴 포기 메일
<img src="https://velog.velcdn.com/images/all_young/post/129551b8-3d0b-4e9e-87d0-b3adc33b812b/image.png" alt=""></p>
</blockquote>
<br>
<br>
<br>

<hr>
<h1 id="그래서-진짜-깨달음-">그래서 진짜 깨달음 .</h1>
<h3 id="1-코딩-테스트-준비를-미리미리-하자">1. 코딩 테스트 준비를 미리미리 하자.</h3>
<p>사실 코딩 테스트가 타 기업들에 비해, 쉽게 나온 편이라 저정도 푼 것 같다.
갑자기 급하게 준비하지 않도록 앞으로 천천히라도 꾸준히 연습하는 것이 좋을 것 같다.</p>
<h3 id="2-프로젝트를-진행할-때-타당성-기반으로-하자">2. 프로젝트를 진행할 때, 타당성 기반으로 하자.</h3>
<p>이전에는 프로젝트를 진행할 때, 선행 연구를 참고해서 결과물을 내는 경우가 많았다.
그렇다 보니, 나의 프로젝트에서 그 기술을 왜 사용했으며, 그것이 타 연구와의 차별성에서 어떤 것을 갖는지에 대한 타당성은 부족했던 것 같다.
이번 면접을 보면서 왜? 라는 질문을 정말 많이 들었다.
그 왜? 라는 것이 정말 중요하며, 그에 대한 답변을 기반으로 상대방을 설득하는 것도 정말 중요하다.</p>
<h3 id="3-결과-중심도-좋지만-과정도-정말-중요하다">3. 결과 중심도 좋지만, 과정도 정말 중요하다.</h3>
<p>프로젝트 결과물을 내는 것에 욕심이 있어서 양으로 승부보는 프로젝트를 진행해왔다.
즉, 진행해 온 프로젝트들의 수는 많으나 그것의 깊이는 사실 그리 깊지 않다.
그렇다보니, 심도 있는 연구를 했는가 라고 했을 때 대답을 고민하게 된다.
다양한 경험도 중요하지만, 하나를 잡고 깊이 파고드는 사람이 되는 것이 중요하다.
다시말해, 내가 얼마나 그 기술에 대해 정확히 알고 있으며 어느 정도 까지 이해하고 있는가가 정말 중요하다.</p>
<h3 id="4-스타트업-서류를-붙은-걸-보니-그동안-쌓아온-커리어들이-꽤-가치가-있나보다">4. 스타트업 서류를 붙은 걸 보니, 그동안 쌓아온 커리어들이 꽤 가치가 있나보다.</h3>
<p>스타트업은 보통 당장 사용할 수 있는 사람을 채용하고 싶어한다고 한다.
3곳의 스타트업에 우선 서류가 모두 붙은 걸 보니, 내가 일할 능력을 갖춘 사람은 맞나보다. 
요새 취업 학년이 다가오니, 이래저래 고민도 많아지고 생각이 복잡해졌는데
서류가 모두 붙은 것과 나를 긍정적으로 생각해주는 면접관님들로 부터 좋은 에너지를 받았다.
<br>
<br>
<br></p>
<h1 id="끝">끝.</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[브라우저와 렌더링 엔진 동작 원리]]></title>
            <link>https://velog.io/@all_young/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%99%80-%EB%A0%8C%EB%8D%94%EB%A7%81-%EC%97%94%EC%A7%84-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC</link>
            <guid>https://velog.io/@all_young/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%99%80-%EB%A0%8C%EB%8D%94%EB%A7%81-%EC%97%94%EC%A7%84-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC</guid>
            <pubDate>Sat, 22 Jul 2023 17:29:12 GMT</pubDate>
            <description><![CDATA[<h2 id="브라우저">브라우저</h2>
<h3 id="1-브라우저-란">1) 브라우저 란?</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/b66bccec-9dbe-41f1-a43b-2d5693586644/image.png" alt=""></p>
<p>브라우저란 월드 와이드 웹(WWW)에서 정보를 검색, 표현하고 탐색하기 위한 소프트웨어이다.</p>
<p>예를 들어, 구글 크롬, 인터넷 익스플로러 등과 같이 검색창이 있는 프로그램이라 생각하면 된다.</p>
<p>브라우저는 인터넷에서 특정 정보로 이동할 수 있는 주소 입력창(=인터페이스)이 있고, 서버와 HTTP로 정보를 주고 받을 수 있는 네트워크 모듈도 포함하고 있다.</p>
<p>서버에서 받은 문서(HTML, CSS, Javascript)를 해석하고 실행하여 화면에 표현하기 위한 해석기(Parser)들을 가지고 있습니다.</p>
<h3 id="2-브라우저의-역할">2) 브라우저의 역할</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/2333f764-1e43-45b6-bbe0-8fa8db641bec/image.png" alt=""></p>
<p>브라우저의 주요 역할은 2가지이다.</p>
<p>첫째, 사용자가 입력한(원하는) 웹페이지, 이미지, 동영상 등의 자원을 서버에게 요청하는 역할</p>
<p>둘째, 서버로부터 전달(응답)받은 자원을 화면에 출력하는 역할</p>
<h2 id="브라우저의-구성-요소">브라우저의 구성 요소</h2>
<h3 id="브라우저의-구성-요소-1">브라우저의 구성 요소</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/46fee590-f87f-4d39-be91-3f6afe1a109a/image.png" alt=""></p>
<p>브라우저의 구성 요소에는 User Interface, Browser Engine, Rendering Engine, Networking, JS Engine, UI Backend, Data Storage가 있다.</p>
<p>User Interface     </p>
<ul>
<li>사용자가 접근할 수 있는 영역이다.</li>
<li>예를 들어, 검색창, 뒤로가기/앞으로가기 버튼, 새로 고침 버튼 등 브라우저 프로그램 자체의 GUI를 구성하는 부분이다.</li>
</ul>
<p>Browser Engine     </p>
<ul>
<li>User Interface와 Rendering Engine 사이의 동작을 제어해주는 엔진이다.<ul>
<li>브라우저라는 프로그램의 비즈니스 로직, 핵심 중추 부분이다.</li>
<li>Data Storage를 참조하며 로컬에 데이터를 쓰고 읽으면서 다양한 작업을 한다.</li>
</ul>
</li>
</ul>
<p>Rendering Engine     </p>
<ul>
<li>요청한 콘텐츠를 화면에 출력하는 역할이다.<ul>
<li>HTML, CSS 등을 파싱하여 최종적으로 화면에 그린다.</li>
</ul>
</li>
</ul>
<p>Networking     </p>
<ul>
<li>http 요청을 할 수 있으며 네티워크를 호출할 수 있다.</li>
</ul>
<p>JS Engine     </p>
<ul>
<li>javascript 코드를 해석하고 실행한다.</li>
</ul>
<p>UI Backend     </p>
<ul>
<li>기본적인 위젯을 그리는 인터페이스이다.</li>
</ul>
<p>Data Storage     </p>
<ul>
<li>Local Storage, Indexed DB, 쿠키 등 브라우저 메모리를 활용하여 저장하는 영역이다. </li>
</ul>
<h2 id="렌더링-엔진의-동작-원리">렌더링 엔진의 동작 원리</h2>
<h3 id="1-렌더링-엔진의-기본적인-동작-원리">1) 렌더링 엔진의 기본적인 동작 원리</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/8aaa5f5b-7d72-4b3c-a1f0-0e549bfd29a6/image.png" alt="">
① 브라우저는 서버로부터 HTML 문서를 모두 전달 받는다.</p>
<p>② 렌더링 엔진은 전달받은 HTML 문서 파싱하여 DOM 트리를 구축한다.</p>
<p>③ 외부 CSS 파일과 함께 포함된 스타일 요소를 파싱한다. </p>
<p>④ DOM 트리와 ③의 결과물을 합쳐 렌더 트리를 구축한다.</p>
<p>⑤ 렌더 트리의 각 노드에 대해서 화면 상에서 어디에 배치할 지 결정한다.</p>
<p>⑥ UI백엔드에서 렌더 트리를 그리게 되고, 화면에 우리가 볼 수 있도록 출력된다.</p>
<h3 id="2-렌더링-엔진의-동작-과정-예시">2) 렌더링 엔진의 동작 과정 예시</h3>
<p><img src="https://velog.velcdn.com/images/all_young/post/d9b4b6b3-d20b-46bb-b14b-9267700ad013/image.png" alt="">
렌더링 엔진의 기본 동작 과정을 더 자세하게 나타낸 그림이다.</p>
<p>다양한 종류의 렌더링 엔진이 존재하지만, 이번 포스팅에서는 웹킷 엔더링 엔진만 다룰 것이다.</p>
<p>렌더링 엔진의 자세한 과정을 설명해보면, 다음과 같다.</p>
<p>① DOM 트리 구축</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/b91454d6-dcf6-4f41-af39-6cae80ce5832/image.png" alt=""></p>
<ul>
<li><p>브라우저는 서버로부터 HTML 문서를 모두 전달 받는다.</p>
</li>
<li><p>어휘와 구문을 분석하여 HTML 문서를 파싱하고, 파싱 트리를 생성한다. 문서 파싱은 브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것을 의미한다.</p>
</li>
<li><p>파싱 트리를 기반으로 DOM 요소와 속성 노드를 가지는 DOM 트리를 생성한다.</p>
</li>
</ul>
<p>② CSSOM(CSS Object Model) 생성</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/2be89076-7434-4eab-8173-d871a7642b38/image.png" alt=""></p>
<ul>
<li><p>①의  DOM을 생성할 때 거쳤던 과정을 그대로 CSS에 반복한다.</p>
</li>
<li><p>그 결과로 브라우저가 이해하고 처리할 수 있는 형식(Style Rules)으로 변환된다.</p>
</li>
</ul>
<p>③ 렌더 트리(DOM + CSSOM) 생성</p>
<p><img src="https://velog.velcdn.com/images/all_young/post/0d4f1833-2529-4cba-be93-86126a1e8f6b/image.png" alt=""></p>
<ul>
<li>DOM Tree가 구축이 되어가는 동안 브라우저는 DOM Tree를 기반으로 렌더 트리를 생성한다. 문서를 시각적인 구성 요소로 만들어주는 역할을 한다.</li>
</ul>
<p>④ 렌더 트리 배치</p>
<ul>
<li>렌더링 트리는 위치와 크기를 가지고 있지 않기 때문에, 객체들에게 위치와 크기를 결정해준다.</li>
</ul>
<p>⑤ 렌더 트리 그리기</p>
<ul>
<li><p>렌더 트리의 각 노드를 화면의 픽셀로 나타낸다.</p>
</li>
<li><p>렌더 트리 그리기가 완료되면, 화면에 콘텐츠가 표현된다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹 서비스에서 발생하는 데이터의 종류와 특징]]></title>
            <link>https://velog.io/@all_young/%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%97%90%EC%84%9C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95</link>
            <guid>https://velog.io/@all_young/%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%97%90%EC%84%9C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95</guid>
            <pubDate>Sun, 16 Jul 2023 10:35:27 GMT</pubDate>
            <description><![CDATA[<h2 id="01-서버-엔지니어가-다루는-데이터">01. 서버 엔지니어가 다루는 데이터</h2>
<h3 id="0101-use-case">01.01. Use Case</h3>
<p><img src="blob:https://velog.io/e0f0da93-9431-4474-9eb7-9d29d08c9750" alt="업로드중.."></p>
<h3 id="0101-transaction거래-데이터">01.01. Transaction(거래 데이터)</h3>
<ul>
<li>거래 요청이 있고 요청에 대한 처리의 결과가 있는 데이터</li>
<li>비즈니스나 시스템에서 빈번하게 생성되고 업데이트 되는 데이터</li>
<li>예시<ul>
<li>상품 주문</li>
<li>결제</li>
<li>환불 요청</li>
<li>기술적으로 시스템의 여러 동작/기능이 하나로 연결되어야 하고, 완결될 때 모두 같이 상태가 결정되는 경우</li>
</ul>
</li>
</ul>
<h3 id="0102-metadata메타-데이터">01.02. Metadata(메타 데이터)</h3>
<ul>
<li>비즈니스나 도메인을 구성하는 추상화된 정보</li>
<li>시스템을 다루는 이해관계자나 제품에 대한상태 정보 등</li>
<li>메타데이터는 업데이트 될 수 있으나, 자주 업데이트 되지는 않는다.</li>
<li>예시<ul>
<li>회원의 기본 정보</li>
<li>판매자의 기본 정보</li>
<li>판매자가 등록한 상품 정보</li>
<li>광고주가 설정한 광고 요청 설정</li>
<li>시스템의 설정 정보</li>
</ul>
</li>
</ul>
<h2 id="02-데이터-엔지니어가-다루는-데이터">02. 데이터 엔지니어가 다루는 데이터</h2>
<h3 id="0201-데이터-엔지니어가-다루는-데이터의-특징">02.01. 데이터 엔지니어가 다루는 데이터의 특징</h3>
<ol>
<li>하나의 메세지가 그 자체로 완결성을 가진다.</li>
<li>하나의 메세지는 immutable 하다.
 a. 메세지 발생 이후에 메세지 안의 값을 변경하지 않는다.
 b. 요구사항에 따라 파이프라인에서 특정 데이터를 추가/삭제 정도만 한다.</li>
<li>메세지 안에 메시지의 고유 값(다른 메시지들과 비교해서 unique함을 판단할 수 있는)을 구분할 수 있다.</li>
<li>시간 정보가 항상 있다.</li>
</ol>
<h3 id="0202-event">02.02. Event</h3>
<p>하나의 독립된 사건을 알리는 데이터.
데이터의 방생만 있고, 응답은 필요 없는 데이터.
발생한 데이터를 추후 활용해야 비즈니스/도메인의 의미가 부여된다.</p>
<p>다음과 같을 때 Event 데이터를 남긴다.</p>
<ul>
<li>거래 데이터가 아니지만, 비즈니스에 필요한 데이터인 경우</li>
<li>하나의 사건 이후에 여러 거래들이 후처리 되어야 하는 경우</li>
<li>Transaction으로 처리할 수도 있지만 꼭 하나로 연결될 필요가 없어서 독립된 여러 이벤트로 정의/발생 시킨 뒤, 추후에 분석단계에서 엮어서 활용하고 싶은 경우.</li>
</ul>
<h3 id="0203-log">02.03. Log</h3>
<p>어떤 시스템이나 거래의 중간에 순간의 주요 정보를 기록한 데이터
Event와 의미가 거의 같거나 비슷하다.
프로그래머의 관행상 파일로 남기는 event data를 로그라고 한다.</p>
<p>Event와 Log의 처리에서는 다음과 같은 기술적 주제를 다룬다.</p>
<ol>
<li>하나의 사건 이후에 여러 거래들이 후처리 되어야 하는 경우</li>
</ol>
<ul>
<li>Message Queue를 이용한 Pub-Sub model</li>
</ul>
<ol start="2">
<li>실시간 Event 전송</li>
</ol>
<ul>
<li>Streaming, CDC</li>
</ul>
<ol start="3">
<li>Event, Log의 Visualization</li>
</ol>
<ul>
<li>ES(OS) - Kibana</li>
</ul>
<ol start="4">
<li>Event, Log의 Data Cleansing</li>
</ol>
<ul>
<li>Streaming, Batch</li>
</ul>
<h3 id="0204-aggregation">02.04. Aggregation</h3>
<p>Raw-Data(원본/원천 데이터)로 부터 비즈니스에 필요한 데이터를 얻기 위해서 집계, 통계를 이용해서 데이터를 만든다. 주로 합계, 평균, 추이를 나타내는 데이터를 만든다.</p>
<p>Aggregation은 데이터 분석을 맡은 사람이 ad-hoc 하게 하기도 한다.
다름의 경우 데이터 엔지니어링 기술이 좀 더 본격적으로 필요하다.</p>
<ol>
<li><p>비스니스를 위해서 지속적으로 집계 데이터가 필요한 경우
 a. Batch(ETL), Streaming 시스템
 b. 안정성과 신뢰성을 갖춘 시스템</p>
</li>
<li><p>집계 대상이 되는 데이터 사이즈가 큰 경우
 a. DB, OLAP 시스템
 b. Backup, Merge, Partitioning, Sharding</p>
</li>
<li><p>집계 대상이 되는 데이터(데이터 소스 똔느 테이블)가 많은 경우
 a. Denormalize, Star-Schema
 b. OLAP cube</p>
</li>
</ol>
<ol start="4">
<li>도메인의 특수성이 있는 경우</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[API(Application Programming Interface)]]></title>
            <link>https://velog.io/@all_young/%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@all_young/%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Sun, 16 Jul 2023 09:33:25 GMT</pubDate>
            <description><![CDATA[<h1 id="01-apiapplication-programming-interface">01. API(Application Programming Interface)</h1>
<h2 id="0101-api의-정의">01.01 API의 정의</h2>
<ul>
<li>소프트웨어/시스템이 다양한 방식(프로그래밍 가능한)으로 상호작용(데이터를 주고, 받고, 해석)하기 위해서 만든 인터페이스(접점)이다. 동시에, 상호작용을 위해서 지켜야 하는 규칙이다.        </li>
<li>클라이언트가 요청하고, 서버가 응답하는데 필요한, 요청과 응답의 형식에 대한 약속이다.</li>
</ul>
<h2 id="0102-api-특징-간단히">01.02 API 특징 (간단히)</h2>
<ul>
<li>API는 보통 서버 개발자가 정의한다.</li>
<li>API를 사용하고자 하는 쪽의 편의성을 고려하여, 클라이언트의 사용성, 의견 등을 반영해야한다.</li>
<li>API는 제공자와 사용자 사이의 의사소통이다.</li>
<li>따라서 만드는 쪽도, 사용하는 쪽도 모두 기술과 사람을 이해해야 좋은 API를 만들 수 있고, API를 잘 사용할 수 있다.</li>
</ul>
<h2 id="0103-api-활용-사례">01.03 API 활용 사례</h2>
<ul>
<li>모바일 앱에서 고객이 쇼필을 하기 위해서는 상품 리스트를 받아와야 한다. 상품 리스트를 조건에 따라서 10개씩 가져오는 API가 필요하다.</li>
<li>사내에서 주기적으로 협업을 하는데 해번 엑셀파일로 데이터를 주고 받으니까 일이 지연되고 파일관리의 어려움이 있다. 그때 그때 데이터를 볼 수 있으면 좋겠다. 이거 API로 만들어주세요. 제가 필요할 때마다 조회해서 쓸게요.</li>
<li>고객사가 우리 광고시스템에 등록할 광고 이미지를 매번 이미지로 전달했다. 고객사가 1000개가 넘으니까 메일함 관리도 어렵고 실수도 잦아진다. 이 API 이용해서 광고 등록 요청해주세요.</li>
</ul>
<h2 id="0104-api의-종류">01.04 API의 종류</h2>
<h3 id="010401-restrepresentational-state-transfer">01.04.01 REST(Representational State Transfer)</h3>
<ul>
<li><p>자원을 이름으로 구분하고, 자원의 상태를 주고받는 방법의 API</p>
</li>
<li><p>HTTP 프로토콜을 기반으로 웹의 자원을 다양하게 활용할 수 있다.</p>
</li>
<li><p>기본 규칙</p>
<ul>
<li><p>HTTP URI(Uniform Resource Identifier)로 대상이 되는 자원(Resource)을 명시한다.</p>
</li>
<li><p>HTTP Method(POST, GET, PUT, DELETE, PATCH 등)로 동작을 명시한다.</p>
</li>
<li><p>Header와 Body로 구성되어있다.</p>
<ul>
<li><p>Header는 key-value로 정적인 정보 전달, Body를 처리하기 전에 필요한 약속, 보안과 관련 정보 등이다. </p>
<ul>
<li>Body에는 header에서 정의한 방식에 따라서 자유롭게 데이터를 담을 수 있다.</li>
</ul>
</li>
</ul>
</li>
<li><p>자유도가 높다.</p>
<ul>
<li>다양한 데이터 포맷을 사용할 수 있다.<ul>
<li>캐시 등 평의나 성능을 위한 기늘을 사용할 수 있다.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="010402-soapsimple-object-access-protocol">01.04.02 SOAP(Simple Object Access Protocol)</h3>
<ul>
<li>SOAP는 그 자체로 프로토콜이다.</li>
<li>메시지 전송 포맷, 기능, 보안 등을 표준으로 정했다.</li>
<li>프로토콜 상 실행 로직(성공/실패/반복)이 정의되어 있기 때문에, 처음부터 끝까지 신뢰성을 제공한다.</li>
<li>자유도가 낮다.</li>
<li>메세지가 크다.</li>
</ul>
<h3 id="010403-graphql">01.04.03 GraphQL</h3>
<ul>
<li>비즈니스 도메인을 그래프 자료구조로 모델링하고 한 번의 요청으로 원하는 정보를 선택적으로 요청하고 전달할 수 있는 API이다.</li>
<li>한 개의 Endpoint로 모든 자료와 구조를 표현할 수 있다. 용도나 자원별로 API나 View 등을 만들 필요가 없다.</li>
<li>한 번의 요청으로 원하는 모든 데이터를 서버로부터 요청하여 가져올 수 있다.</li>
</ul>
<pre><code>* 기존에 REST API 사용할 때 자주 발생하는 Overfetching(원하는 정보 이상으로 가져오는 것)이나 Underfetching(원하는 데이터를 위해 여러 요청을 보내는 것) 문제가 발생하지 않는다.
* 기존 REST의 API나 리소스 단위로 캐시하던 방법의 적용이 어렵다.
* 필터링, 보안 등 다양한 제약사항을 서버에서 구현하기가 어렵다.</code></pre><h3 id="010404-openapi">01.04.04 OpenAPI</h3>
<ul>
<li><p>누구나 활용할 수 있도록 공개된 API를 말한다.</p>
</li>
<li><p>외부 소프트웨어 개발자가 빠르게 시스템을 통합할 수 있도록 하기 위해서 만든다.</p>
<ul>
<li><p>API의 명세가 공개되어 있다.</p>
<ul>
<li><p>공개는 되어있지만, 일부 사용의 제약이 있을 수 있다.(ex) 요청수, 시산당 요청수 등)</p>
</li>
<li><p>사용하는 사람이 많으므로, 설계와 신뢰성이 중요하다.</p>
</li>
<li><p>예시</p>
<ul>
<li>공공데이터포털</li>
<li>네이버지도 API</li>
<li>유튜브 API</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="0105-api-설계-예시">01.05 API 설계 예시</h2>
<h3 id="010501-http-url을-통해-요청응답-명시">01.05.01 HTTP URL을 통해 요청/응답 명시</h3>
<ul>
<li>요청 예시 : <a href="https://zero-base.co.kr/login">https://zero-base.co.kr/login</a> (로그인 페이지 요청)</li>
<li>응답 예시 : <a href="https://zero-base.co.kr/login/success">https://zero-base.co.kr/login/success</a> (로그인 성공 응답)
　 　　 　　<a href="https://zerobase.co.kr/login/fail">https://zerobase.co.kr/login/fail</a> (로그인 실패 응답)</li>
</ul>
<h3 id="010502-http-method를-통해-동작-적용">01.05.02 HTTP Method를 통해 동작 적용</h3>
<ul>
<li>Create
　: (회원가입 시) 지금 요청 보내는 계정을 데이터베이스에 새로 넣어줘</li>
<li>Read
　: (로그인 시) 올바른 계정인지 데이터베이스에 저장되어 있는 회원 가입 계정을 읽어줘</li>
<li>Update
　: (로그인 계정 변경할 때) 데이터베이스에 저장되어 있는 계정 비밀번호를 지금 요청 보내는 비밀번호로 변경해줘</li>
<li>Delete
　: (회원 탈퇴 시) 데이터베이스에 저장되어 있는 이 계정 삭제해줘</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/2a9fc84a-7d56-4ebe-81b4-a663ee5b022c/image.png" alt="백엔드 API 설계 - 스웨거 사용 예시 이미지"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스케일링과 범주형 변수]]></title>
            <link>https://velog.io/@all_young/%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%EA%B3%BC-%EB%B2%94%EC%A3%BC%ED%98%95-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@all_young/%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81%EA%B3%BC-%EB%B2%94%EC%A3%BC%ED%98%95-%EB%B3%80%EC%88%98</guid>
            <pubDate>Thu, 08 Sep 2022 09:35:08 GMT</pubDate>
            <description><![CDATA[<h1 id="75-스케일링과-범주형-변수"><strong>7.5 스케일링과 범주형 변수</strong></h1>
<hr>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>스케일링(scaling): 데이터의 범위를 늘리거나 줄이는 방식으로 여러 변수들이 같은 스케일이 오도록 하는 것</li>
<li>정규화(normalization): 원래 변수 값에서 평균을 뺀 후에 표준편차로 나누는 방법으로, 스케일리의 일종이다.</li>
<li>고워 거리(Gower&#39;s distance): 수치형과 범주형 데이터가 섞여 있는 경우에 모든 변수가 0~1 사이로 오도록 하는 스케일링 방법</li>
</ul>
<br>

<hr>
<br>

<h2 id="751-변수-스케일링"><strong>7.5.1 변수 스케일링</strong></h2>
<ul>
<li>Z 정규화
<img src="https://velog.velcdn.com/images/all_young/post/d3b6eb6d-4859-442b-8245-5ad78acfbc48/image.png" alt=""></li>
</ul>
<p>스케일링은 PCA에서도 역시 중요하다. z 점수를 사용하는 것은 주성분을 계산할 때 공분산 행렬 대신 상관행렬을 사용하는 것과 같은 결과를 가져온다. PCA를 계산하는 소프트웨어에는 일반적으로 상관행렬을 사용할 수 있는 옵션이 있다.</p>
<br>

<hr>
<br>

<h2 id="752-지배-변수"><strong>7.5.2 지배 변수</strong></h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/8254c039-0188-4e08-8227-70e3844664df/image.png" alt=""></p>
<p>처음 두 가지 주성분은 GOOGL과 AMZN에 의해 완전히 지배되고 있다. 이는 GOOGL 과 AMZN의 주가 움직임이 전체 변동성의 대부분을 지배하기 때문이다.</p>
<p>이러한 상황에서는 변수를 스케일링해서 포함하거나, 이러한 지배변수를 전테 분석에서 제외하고 별도로 처리할 수도 있다.</p>
<p>어떤 방법이 항상 옳다고는 할 수 없으며 응용분야에 따라 달라진다.</p>
<br>

<hr>
<br>

<h2 id="753-범주형-데이터와-고워-거리"><strong>7.5.3 범주형 데이터와 고워 거리</strong></h2>
<p><strong>1. 들어가며</strong></p>
<ul>
<li>범주형 데이터가 있는 경우에는 순서형 변수 또는 이진형 변수를 사용하여 수치형 데이터로 변환해야 한다.</li>
<li>데이터를 구성하는 변수들에 연속형과 이진형 변수가 섞여 있는 경우에는 비슷한 스케일이 되도록 변수의 크기를 조정해야 한다. 이때 고워 거리를 사용한다.</li>
</ul>
<br>

<p><strong>2. 고워 거리의 기본 아이디어</strong></p>
<ul>
<li>수치형 변수나 순서형 요소에서 두 레코드 간의 거리는 차이의 절댓값(맨해튼 거리)으로 계산한다.</li>
<li>범주형 변수의 경우 두 레코드 사이의 범주가 서로 다르면 거리가 1이고 범주가 동일하면 거리는 0이다.</li>
</ul>
<br>

<p><strong>3. 고워 거리 계산 방법</strong></p>
<ul>
<li>각 레코드의 변수 i와 j의 모든 쌍에 대해 거리 d를 계산한다.</li>
<li>각 d의 크기를 최솟값이 0이고 최댓값이 1이 되도록 스케일을 조정한다.</li>
<li>거리 행렬을 구하기 위해 변수 간에 스케일된 거리를 모두 더한 후 평균 혹은 가중평균을 계산한다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모델 기반 클러스터링]]></title>
            <link>https://velog.io/@all_young/%EB%AA%A8%EB%8D%B8-%EA%B8%B0%EB%B0%98-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</link>
            <guid>https://velog.io/@all_young/%EB%AA%A8%EB%8D%B8-%EA%B8%B0%EB%B0%98-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</guid>
            <pubDate>Thu, 08 Sep 2022 09:19:44 GMT</pubDate>
            <description><![CDATA[<h1 id="74-모델-기반-클러스터링"><strong>7.4 모델 기반 클러스터링</strong></h1>
<hr>
<br>

<h2 id="741-다변량정규분포"><strong>7.4.1 다변량정규분포</strong></h2>
<p><strong>1. 다변량정규분포란?</strong></p>
<ul>
<li>p개의 변수 집합 X1, X2, X3, ... , Xp에 대해 정규분포를 일반화한 것</li>
<li>분포는 평균 집합과 공분산행렬로 정의된다.</li>
<li>공분산행렬은 변수가 서로 어떻게 상호 관련되어 있는지 나타내는 지표
<img src="https://velog.velcdn.com/images/all_young/post/73cae7e3-c136-4842-a822-936a20bc8e12/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h2 id="742-정규혼합"><strong>7.4.2 정규혼합</strong></h2>
<ul>
<li>모델 기반 클러스터링의 핵심 아이디어는 각 레코드가 k개의 다변량정규분포 중 하나로부터 발생했다고 가정하는 것</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/ec6753df-3b5d-419c-bd78-6272f5779b7f/image.png" alt=""></p>
<br>

<hr>
<br>

<h2 id="743-클럿스터-개수-정하기"><strong>7.4.3 클럿스터 개수 정하기</strong></h2>
<ul>
<li>k-평균이나 계층적 클러스터링과 달리 mclust는 클러스터 수를 자동으로 선택</li>
<li>베이즈 정보 기준(BIC) 값이 큰 클러스터의 개수를 선택하도록 동작
<img src="https://velog.velcdn.com/images/all_young/post/184bdd49-19ee-4550-977f-9f49e792ae22/image.png" alt=""></li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[계층적 클러스터링]]></title>
            <link>https://velog.io/@all_young/%EA%B3%84%EC%B8%B5%EC%A0%81-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</link>
            <guid>https://velog.io/@all_young/%EA%B3%84%EC%B8%B5%EC%A0%81-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</guid>
            <pubDate>Thu, 08 Sep 2022 09:07:43 GMT</pubDate>
            <description><![CDATA[<h1 id="73-계층적-클러스터링"><strong>7.3 계층적 클러스터링</strong></h1>
<hr>
<p><strong>1. 용어 정리</strong></p>
<ul>
<li>덴드로그램(dendrogram): 레코드들, 그리고 레코드들이 속한 계측적 클러스터를 시각적으로 표현</li>
<li>거리(distance): 한 레코드가 다른 레코드들과 얼마나 가까운지를 보여주는 측정 지표</li>
<li>비유사도(dissimilarity): 한 클러스터가 다른 클러스터들과 얼마나 가까운지를 보여주는 측정 지표</li>
</ul>
<br>

<hr>
<br>

<h2 id="731-간단한-예제"><strong>7.3.1 간단한 예제</strong></h2>
<p><strong>1. 두 가지 기본 구성 요소 기반</strong></p>
<ul>
<li>두 개의 레코드 i와 j 사이의 거리를 측정하기 위한 거리 측정 지표</li>
<li>두 개의 클러스터 A와 B 사이의 차이를 측정하기 위한, 각 클러스터 구성원 간의 거리 d를 기반으로 한 비유사도 측정 지표 D</li>
</ul>
<br>

<hr>
<br>

<h2 id="732-덴드로그램"><strong>7.3.2 덴드로그램</strong></h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/db35a3a4-992c-473a-8920-fdd59ff5de03/image.png" alt=""></p>
<p>트리의 잎은 각 레코드를 의미한다. 트리의 가지 길이는 해당 클러스터 간의 차이 정도를 나타낸다. 구글과 아마존에 대한 수익률은 서로 다르고 다른 주식에 대한 수익률과도 상당히 다른 것을 볼 수 있다. 다른 주식들은 자연스럽게 그룹을 형성한다. 석유 관련주들(SLB, CVX, XOM, COP)은 자신들의 클러스터가 있고 애플(AAPL)은 독자적이며, 나머지는 서로 비슷하다.</p>
<br>

<hr>
<br>

<h2 id="733-병합-알고리즘"><strong>7.3.3 병합 알고리즘</strong></h2>
<ol>
<li>데이터의 모든 레코드에 대해, 단일 레코드로만 구성된 클러스터들로 초기 클러스터 집합을 만든다.</li>
<li>모든 쌍의 클러스터 k, l 사이의 비유사도 D를 계산한다.</li>
<li>D에 따라 ㄱ가장 가까운 두 클러스터를 병합한다.</li>
<li>둘 이상의 클러스터가 남아 있으면 2단게로 다시 돌아간다. 그렇지 않고 클러스터가 하나 남는다면 알고리즘을 멈춘다.</li>
</ol>
<br>

<hr>
<br>

<h2 id="734-비유사도-측정"><strong>7.3.4 비유사도 측정</strong></h2>
<p><strong>1. 비유사도를 특정하는 네 가지 일반적인 지표</strong></p>
<ul>
<li>완전연결</li>
<li>단일연결</li>
<li>평균연결</li>
<li>최소분산</li>
</ul>
<p><strong>2. 주식 데이터에 대한 비유사도 측정 지표 간 비교</strong>
<img src="https://velog.velcdn.com/images/all_young/post/23e04675-b7b1-4184-88c0-2404637342df/image.png" alt=""></p>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[k-평균 클러스터링]]></title>
            <link>https://velog.io/@all_young/k-%ED%8F%89%EA%B7%A0-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</link>
            <guid>https://velog.io/@all_young/k-%ED%8F%89%EA%B7%A0-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81</guid>
            <pubDate>Thu, 08 Sep 2022 08:46:43 GMT</pubDate>
            <description><![CDATA[<h1 id="72-k-평균-클러스터링"><strong>7.2 k-평균 클러스터링</strong></h1>
<hr>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>클러스터(cluster): 서로 유사한 레코드들의 집합</li>
<li>클러스터 평균(cluster mean): 한 클러스터 안에 속한 레코드들의 평균 벡터 변수</li>
<li>k: 클러스터의 개수</li>
</ul>
<br>

<hr>
<br>

<h2 id="721-간단한-예제"><strong>7.2.1 간단한 예제</strong></h2>
<ul>
<li>클러스터의 중심 (클러스터내에 존재하는 점들의 평균)
<img src="https://velog.velcdn.com/images/all_young/post/c78c4650-de4f-4ec6-ad60-4328bd0b3d89/image.png" alt=""></li>
</ul>
<br>

<ul>
<li>클러스터 내부의 제곱합
<img src="https://velog.velcdn.com/images/all_young/post/04fe5a20-b7f1-423b-8fb4-d35c303dbaf6/image.png" alt=""></li>
</ul>
<br>

<ul>
<li>k-평균 할당법: 다음의 식이 최소가 되도록
<img src="https://velog.velcdn.com/images/all_young/post/979b3362-7dbd-4970-9270-9d0e445efe32/image.png" alt=""></li>
</ul>
<br>

<ul>
<li>시각화
<img src="https://velog.velcdn.com/images/all_young/post/00244d59-dacd-4f13-8308-87407290175b/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h2 id="722-k-평균-알고리즘"><strong>7.2.2 k-평균 알고리즘</strong></h2>
<ol>
<li>각 레코드를 거리가 가장 가까운 평균을 갖는 클러스터에 할당한다.</li>
<li>새로 할당된 레코드들을 가지고 새로운 클러스터 평균을 계산한다.</li>
</ol>
<br>

<hr>
<br>

<h2 id="723-클러스터-해석"><strong>7.2.3 클러스터 해석</strong></h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/ae1ed0cd-3890-4f51-ba20-c692ca0258c7/image.png" alt=""></p>
<p>예를 들어 클러스터 4와 5는 각각 주식시장이 내리고 오른 날을 의미한다. 클러스터 2와 3은 각각 에너지 관련 주식이 내린 날과 소비재 주식이 오른 날의 특징을 보여준다. 마지막으로 클러스터 1은 에너지 주식은 오르고 소비재 주식은 내린 날을 보여준다.</p>
<p>클러스터 평균 그래프가 주성분 분석(PCA)에서 봤던 부하 그래프와 매우 비슷하다. PCA와 가장 다른 점은 클러스터 평균에서는 부호가 매우 중요한 의미를 갖는다는 점이다. PCA에서는 변동성의 주요 방향을 찾는 것이 목적이었다면, 클러스터 분석에서는 서로 가까운 위치에 있는 레코드들의 그룹을 찾는 것이 목적이다.</p>
<br>

<hr>
<br>

<h2 id="724-클러스터-개수-선정"><strong>7.2.4 클러스터 개수 선정</strong></h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/ef857fe2-409b-4072-8fa2-bfb025858a14/image.png" alt=""></p>
<ul>
<li>&#39;최상의&#39; 클러스터 개수를 찾는 딱 한가지 표준화된 방법은 없다.</li>
<li>팔꿈치 방법은 언제 클러스터 세트가 데이터의 분산의 &#39;대부분&#39;을 설명하는지를 알려준다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[주성분]]></title>
            <link>https://velog.io/@all_young/%EC%A3%BC%EC%84%B1%EB%B6%84</link>
            <guid>https://velog.io/@all_young/%EC%A3%BC%EC%84%B1%EB%B6%84</guid>
            <pubDate>Thu, 08 Sep 2022 08:30:14 GMT</pubDate>
            <description><![CDATA[<h1 id="71-주성분분석"><strong>7.1 주성분분석</strong></h1>
<hr>
<p><strong>1. 용어 정리</strong></p>
<ul>
<li>주성분(principal component): 예측변수들의 선형결합</li>
<li>부하(loading): 예측변수들을 성분으로 변형할 때 사용되는 가중치</li>
<li>스크리그래프(screeplot): 성분들의 변동을 표시한 그림. 설명된 분산 혹은 설명된 분산의 비율을 이용하여 성분들의 상대적인 중요도를 보여준다.</li>
</ul>
<br>

<p><strong>2. 주성분분석 이란?</strong></p>
<ul>
<li>주성분분석(PCA): 수치형 변수가 어떤 식으로 공변하는지 알아내는 기법</li>
<li>주성분: 전체 변수들의 변동성을 거의 대부분 설명할 수 있는 적은 수의 변수들의 집합</li>
<li>활용성: 데이터 차원 축소</li>
</ul>
<br>

<hr>
<br>

<h2 id="711-간단한-예제"><strong>7.1.1 간단한 예제</strong></h2>
<p><img src="https://velog.velcdn.com/images/all_young/post/c595b501-2e53-4c2f-928f-c98bf71cda2c/image.png" alt=""></p>
<ul>
<li>Z: 주성분</li>
<li>X: 변수</li>
<li>w: 가중치 (= 주성분의 부하)</li>
</ul>
<ul>
<li>Z1: 전체 변동성을 가장 잘 설명하는 선형결합</li>
<li>Z2: 첫 주성분과 서로 수직이며, 나머지 변동성 설명</li>
</ul>
<blockquote>
<p>셰브런(CVX)과 엑스모빌(XOM)의 주가 수익에 대한 주성분
<img src="https://velog.velcdn.com/images/all_young/post/95f64584-df43-42b5-886d-c30b95a1772d/image.png" alt=""></p>
</blockquote>
<ul>
<li>두 점선은 각각 주성분의 방향을 보여준다.</li>
<li>첫 번째 선은 타원의 장축을 따라 존재</li>
<li>두 번째 선은 단축 위에 존재</li>
</ul>
<br>

<hr>
<br>

<h2 id="712-주성분-계산"><strong>7.1.2 주성분 계산</strong></h2>
<ol>
<li>첫 번째 주성분을 구하기 위해 PCA는 전체 변동을 최대한 설명하기 위한 예측변수의 선형결합을 구한다.</li>
<li>이 선형결합은 첫 번째 새로운 예측 수 Z1이 된다.</li>
<li>같은 변수들을 이용해 새로운 두 변수 Z2를 만들기 위해, 다른 가중치를 가지고 이 과정을 반복하다. 가중치 Z1과 Z2가 서로 상관성이 없도록 결정한다.</li>
<li>원래 변수 X의 개수만큼 새로운 변수 Z를 구할 때까지 이 과정을 계속한다.</li>
<li>대부분의 변동을 설명하기 위해 필요한 만큼의 주성분을 선택해 남겨놓는다.</li>
<li>결과적으로 각 주성분에 대한 가중치 집합을 얻게 된다. 마지막 단계는 원래 데이터를 이 가중치들을 적용해 새로운 주성분으로 변형하는 것이다. 이렇게 얻은 새로운 값들을 예측변수들의 차원이 축소된 형태로 사용할 수 있다.</li>
</ol>
<br>

<hr>
<br>

<h2 id="713-주성분-해석"><strong>7.1.3 주성분 해석</strong></h2>
<p><strong>1. 주성분에 대한 이해를 돕기 위해 사용되는 표준화된 두 가지 시각화 방법</strong></p>
<ul>
<li>스크리그래프 (주성분의 상대적인 중요도를 표시)
<img src="https://velog.velcdn.com/images/all_young/post/824d00b7-7131-4745-89c0-d77473ded6c2/image.png" alt=""></li>
</ul>
<br>

<ul>
<li>상위 주성분들의 가중치 표시
<img src="https://velog.velcdn.com/images/all_young/post/76facd72-0105-48ed-97bc-d68dee6804e3/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h2 id="714-대응분석"><strong>7.1.4 대응분석</strong></h2>
<ul>
<li>PCA는 범주형 데이터에 사용할 수 없지만, 관련 있는 기술은 대응분석이라고 존재한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/all_young/post/4c99b04d-f8e1-4a2b-812c-9efe5ca56351/image.png" alt=""></p>
<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[멀티암트 밴딧 알고리즘 & 검정력과 표본 크기]]></title>
            <link>https://velog.io/@all_young/%EB%A9%80%ED%8B%B0%EC%95%94%ED%8A%B8-%EB%B0%B4%EB%94%A7-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B2%80%EC%A0%95%EB%A0%A5%EA%B3%BC-%ED%91%9C%EB%B3%B8-%ED%81%AC%EA%B8%B0</link>
            <guid>https://velog.io/@all_young/%EB%A9%80%ED%8B%B0%EC%95%94%ED%8A%B8-%EB%B0%B4%EB%94%A7-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B2%80%EC%A0%95%EB%A0%A5%EA%B3%BC-%ED%91%9C%EB%B3%B8-%ED%81%AC%EA%B8%B0</guid>
            <pubDate>Thu, 18 Aug 2022 03:34:51 GMT</pubDate>
            <description><![CDATA[<h1 id="310-멀티암드-밴딧-알고리즘"><strong>3.10 멀티암드 밴딧 알고리즘</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>멀티암트 밴딧(MAB): 고객이 선택할 수 있는 손잡이가 여러 개인 가상의 슬롯 머신을 말하며, 각 손잡이는 각기 다른 수익을 가져다준다. 다중 처리 실험에 대한 비유라고 생각할 수 있다.</li>
<li>손잡이(arm): 실험에서 어떤 하나의 처리를 말한다</li>
<li>상금(win): 슬롯머신으로 딴 상금에 대한 실험적 비유</li>
</ul>
<br>

<p><strong>2. 주요 개념</strong></p>
<ul>
<li>전통적 A/B 검정은 임의 표본 추출 과정을 기본으로 하기 때문에, 수익이 낮은 것을 너무 많이 시도할 수 있다.</li>
<li>이롸 대조적으로 MAB는 실험 도중에 얻은 정보를 통합하고 수익이 낮은 것의 빈도를 줄이는 쪽으로 표본 추출 과정을 변경한다.</li>
<li>또한 두 가지 이상의 처리를 효과적으로 다룰 수 있다.</li>
<li>추출 확률을 수익이 낮은 처리에서 수익이 높으리라 추정되는 쪽으로 이동시키기 위한 다양한 알고리즘이 존재한다.</li>
</ul>
<br>

<hr>
<h1 id="311-검정력과-표본크기"><strong>3.11 검정력과 표본크기</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>효과크기(effect size): &#39;클릭률의 20% 향상&#39;과 같이 통계 검정을 통해 판단할 수 있는 효과의 최소 크기</li>
<li>검정력(power): 주어진 표본 크기로 주어진 효과 크기를 알아낼 확률</li>
<li>유의수준(sugnificance level): 검증 시 사용할 통계 유의 수준</li>
</ul>
<br>

<p><strong>2. 주요 개념</strong></p>
<ul>
<li>통계 검정을 수행하기 앞서, 어느 정도의 표본크기가 필요한지 미리 생각할 필요가 있다.</li>
<li>알아내고자 하는 효과의 최소 크기를 지정해야한다.</li>
<li>또한 효과크기를 알아내기 위해 요구되는 확률(검정력)을 지정해야 한다.</li>
<li>마지막으로, 수행할 가설검정에 필요한 유의수준을 정해야 한다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[카이제곱검정]]></title>
            <link>https://velog.io/@all_young/%EC%B9%B4%EC%9D%B4%EC%A0%9C%EA%B3%B1%EA%B2%80%EC%A0%95</link>
            <guid>https://velog.io/@all_young/%EC%B9%B4%EC%9D%B4%EC%A0%9C%EA%B3%B1%EA%B2%80%EC%A0%95</guid>
            <pubDate>Thu, 18 Aug 2022 03:26:33 GMT</pubDate>
            <description><![CDATA[<h1 id="39-카이제곱검정"><strong>3.9 카이제곱검정</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>카이제곱통계량(chi-square statistic): 기댓값으로부터 어떤 관찰값까지의 거리를 나타내는 측정치</li>
<li>기댓값(expectation): 어떤 가정으로부터 데이터가 발생할 때, 그에 대해 기대하는 정도</li>
<li>d.f.(degrees od freedom): 자유도</li>
</ul>
<br>

<hr>
<br>

<h2 id="391-카이제곱검정-재표본추출-방법"><strong>3.9.1 카이제곱검정: 재표본추출 방법</strong></h2>
<p><strong>1. 수식</strong></p>
<ul>
<li><p>피어슨 잔차
   <img src="https://velog.velcdn.com/images/all_young/post/eb471eac-124e-431d-852f-8a5473b9ae15/image.png" alt=""></p>
</li>
<li><p>카이제곱통계량 
  <img src="https://velog.velcdn.com/images/all_young/post/f38afe0a-f776-4b8b-8f51-3670c9fee81b/image.png" alt=""></p>
</li>
</ul>
<br>

<hr>
<br>

<h2 id="392-카이제곱검정-통계적-이론"><strong>3.9.2 카이제곱검정: 통계적 이론</strong></h2>
<br>

<ul>
<li>적절한 카이제곱 분포는 자유도에 의해 결정 된다.
  <img src="https://velog.velcdn.com/images/all_young/post/6783a563-aee6-4883-b7eb-99efb230363c/image.png" alt=""></li>
</ul>
<br>

<ul>
<li>다양한 자유도에 따른 카이제곱 분포
<img src="https://velog.velcdn.com/images/all_young/post/3799b190-72d5-460b-924e-cac8c150c81d/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h2 id="393-피셔의-정확검정"><strong>3.9.3 피셔의 정확검정</strong></h2>
<br>

<p><strong>주요 개념</strong></p>
<ul>
<li>통계학에서 흔한 정차는 관측된 데이터가 독립성 가정을 따르는지 검증하는 것이다.</li>
<li>카이제곱분포는 카이제곱통계량을 비교할 기준분포이다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[분산분석]]></title>
            <link>https://velog.io/@all_young/%EB%B6%84%EC%82%B0%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@all_young/%EB%B6%84%EC%82%B0%EB%B6%84%EC%84%9D</guid>
            <pubDate>Thu, 18 Aug 2022 03:03:49 GMT</pubDate>
            <description><![CDATA[<h1 id="38-분산분석"><strong>3.8 분산분석</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>쌍별 비교(pairwise comparison): 여러 그룹 중 두 그룹 간의 가설검정</li>
<li>총괄검정(omnibus test): 여러 그룹 평균들의 전체 분산에 관한 단일 가설 검정</li>
<li>분산분해(decomposition of variance): 구성 요소 분리</li>
<li>F 통계량(F-statistic): 그룹 평균 간의 차이가 랜덤 모델에서 예상되는 것에서 벗어나느 정도를 측정하는 표준화통계량</li>
<li>SS(sum of squares): 어떤 평균으로부터의 편차들의 제곱합</li>
</ul>
<br>

<p><strong>2. 분산분석이란?</strong></p>
<ul>
<li>여러 그룹간의 통계적으로 유의미한 차이를 검정하는 통계적 절차</li>
<li>ANOVA 라고 부르기도 한다.</li>
</ul>
<br>

<p><strong>3. 예제</strong></p>
<ul>
<li>코드<pre><code class="language-python">import pandas as pd
import numpy as np
</code></pre>
</li>
</ul>
<p>url = &quot;<a href="https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/four_sessions.csv&quot;">https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/four_sessions.csv&quot;</a>
four_sessions = pd.read_csv(url)    </p>
<p>observed_variance = four_sessions.groupby(&#39;Page&#39;).mean().var()[0]
print(&#39;Observed means:&#39;, four_sessions.groupby(&#39;Page&#39;).mean().values.ravel())
print(&#39;Variance:&#39;, observed_variance)</p>
<p>def perm_test(df):
  df = df.copy()
  df[&#39;Time&#39;] = np.random.permutation(df[&#39;Time&#39;].values)
  return df.groupby(&#39;Page&#39;).mean().var()[0]</p>
<p>perm_variance = [perm_test(four_sessions) for _ in range(3000)]
print(&#39;Pr(Prob)&#39;, np.mean([var &gt; observed_variance for var in perm_variance]))</p>
<pre><code>* 결과
각 그룹당 평균값, 분산 그리고 p 값을 확인할 수 있다.
![](https://velog.velcdn.com/images/all_young/post/03c1cb2c-fe38-46f8-992e-369afcb725b5/image.png)

&lt;br&gt;

---

&lt;br&gt;

## **3.8.1 F 통계량**

**1. F 통계량**
* 잔차 오차로 인한 분산과 그룹 평균의 분산에 대한 비율을 기초로 한다.
* 비율이 높을수록 통계쩍으로 유의미하다고 할 수 있다.

&lt;br&gt;

**2. 예제: ANOVA 테이블 계산**
* 코드
```python
import statsmodels.api as sm
import statsmodels.formula.api as smf

model = smf.ols(&#39;Time ~ Page&#39;, data = four_sessions).fit()

aov_table = sm.stats.anova_lm(model)
aov_table</code></pre><ul>
<li>결과
<img src="https://velog.velcdn.com/images/all_young/post/2e3d0d74-1890-4eed-b688-c695473bdaed/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h2 id="382-이원-분산분석"><strong>3.8.2 이원 분산분석</strong></h2>
<br>

<p><strong>1. 주요 개념</strong></p>
<ul>
<li>ANOVA는 여러 그룹의 실험 결과를 분석하기 위한 통계적 절차이다.</li>
<li>A/B 검정과 비슷한 절차를 확장하여 그룹 간 전체적인 편차가 우연히 발생할 수 있는 범위 내에 있는지를 평가하기 위해 사용한다.</li>
<li>ANOVA의 결과 중 유용한 점 중 하나는 그룹 처리, 상호작용 효과, 오차와 관련된 분산의 구성 요소들을 구분하는 데 있다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[t 검정 & 다중 검정 & 자유도]]></title>
            <link>https://velog.io/@all_young/t-%EA%B2%80%EC%A0%95-%EB%8B%A4%EC%A4%91-%EA%B2%80%EC%A0%95-%EC%9E%90%EC%9C%A0%EB%8F%84</link>
            <guid>https://velog.io/@all_young/t-%EA%B2%80%EC%A0%95-%EB%8B%A4%EC%A4%91-%EA%B2%80%EC%A0%95-%EC%9E%90%EC%9C%A0%EB%8F%84</guid>
            <pubDate>Thu, 18 Aug 2022 02:42:29 GMT</pubDate>
            <description><![CDATA[<h1 id="35-t-검정"><strong>3.5 t 검정</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>검정통계량(test statistic): 관심의 차이 또는 효과에 대한 측정 지표</li>
<li>t 통계량(t-statistic): 평균과 같이 표준화된 형태의 일반적인 검정통계량</li>
<li>t 분포(t-distribution): 관측된 t 통계량을 비교할 수 있는, (귀무가설에서 파생된) 기준분포</li>
</ul>
<br>

<p><strong>2. 예제: t-test</strong></p>
<ul>
<li>코드<pre><code class="language-python">import scipy.stats as stats
</code></pre>
</li>
</ul>
<p>res = stats.ttest_ind(session_times[session_times.Page == &#39;Page A&#39;].Time,
                      session_times[session_times.Page == &#39;Page B&#39;].Time,
                      equal_var = False)</p>
<p>print(f&#39;p-value for single sided test: {res.pvalue / 2:.4f}&#39;)</p>
<p>```</p>
<ul>
<li>결과
<img src="https://velog.velcdn.com/images/all_young/post/9ddb762f-c3ea-4f42-846a-ed04e55325a9/image.png" alt=""></li>
</ul>
<br>

<hr>
<br>

<h1 id="36-다중검정"><strong>3.6 다중검정</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>제 1종 오류(type 1 error): 어떤 효과가 통계적으로 유의미하다고 잘못된 결론을 내린다.</li>
<li>거짓 발견 비율(FDR): 다중검정에서 1종 오류가 발생하는 비율</li>
<li>알파 인플레이션(alpha inflation): 1종 오류를 만들 확률인 알파가 더 많은 테스트를 수행할수록 증가하는 다중검정 현상.</li>
<li>p 값 조정(adjustment of p-value): 동일한 데이터에 대해 다중검정을 수행하는 경우에 필요하다.</li>
<li>과대적합(overfitting): 잡음까지 피팅</li>
</ul>
<br>

<p><strong>2. 주요 개념</strong></p>
<ul>
<li>연구 조사나 데이터 마이닝 프로젝트에서 다중성(다중비교, 많은 변수, 많은 모델 등)은 일부가 우연히 유의미하다는 결론을 내릴 위험을 증가시킨다.</li>
<li>여러 통계 비교(즉, 여러 유의성검정)와 관련된 상황의 경우 통계적 수정 절차가 필요하다.</li>
<li>데이터 마이닝에서, 라벨이 지정된 결과변수가 있는 (즉 분류 결과를 알고 있는) 홀드아웃 표본을 사용하면 잘못된 결과를 피할 수 있다.</li>
</ul>
<br>

<hr>
<br>

<h1 id="37-자유도"><strong>3.7 자유도</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>표본 크기 n: 해당 데이터에서 관측값의 개수</li>
<li>d.f.(degrees of freedom): 자유도</li>
</ul>
<br>

<p><strong>2. 주요 개념</strong></p>
<ul>
<li>자우도(d.f.)는 검정통계량을 표준화하는 계산의 일부이며, 이를 통해 기준 분포(t 분포, F 분포 등)와 비교할 수 있다.</li>
<li>자유도 개념은 회귀를 할 때 (다중공선성을 피하기 위해) 범주형 변수들을 n-1 지표 혹은 더미 변수로 요인화하는 것의 이유가 된다.</li>
</ul>
<br>

<hr>
<p>피터 브루스, 앤드루 브루스의 <strong>&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;</strong> 을 읽고 정리한 내용입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[재표본 추출 & 통계적 유의성 & p값]]></title>
            <link>https://velog.io/@all_young/%EC%9E%AC%ED%91%9C%EB%B3%B8-%EC%B6%94%EC%B6%9C-%ED%86%B5%EA%B3%84%EC%A0%81-%EC%9C%A0%EC%9D%98%EC%84%B1-p%EA%B0%92</link>
            <guid>https://velog.io/@all_young/%EC%9E%AC%ED%91%9C%EB%B3%B8-%EC%B6%94%EC%B6%9C-%ED%86%B5%EA%B3%84%EC%A0%81-%EC%9C%A0%EC%9D%98%EC%84%B1-p%EA%B0%92</guid>
            <pubDate>Thu, 18 Aug 2022 02:25:04 GMT</pubDate>
            <description><![CDATA[<h1 id="33-재표본추출"><strong>3.3 재표본추출</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>재표본추출: 관측 데이터로부터 반복해서 표본 추출하는 과정.</li>
<li>순열검정(permutation test): 두 개 이상의 표본을 함께 결합하여 관측값들을 무작위로(또는 전부를) 재표본으로 추출하는 과정을 말한다.</li>
<li>복원/비복원(with or without replacement): 표본을 추출할 때, 이미 한 번 뽑은 데이터를 다음번 추출을 위해 다시 제자리에 돌려 놓거나/다음 추출에서 제외하는 표본추출 방법</li>
</ul>
<p><strong>2. 재표본 추출이란</strong></p>
<ul>
<li>랜덤한 변동성을 알아보자는 일반적인 목표를 가진다.</li>
<li>관찰된 데이터의 값에서 표본을 반복적으로 추출하는 것을 의미</li>
<li>부트스트랩과 순열검정이라는 두 가지 주요 유형이 있다.</li>
</ul>
<br>

<hr>
<br>

<h2 id="331-순열검정"><strong>3.3.1 순열검정</strong></h2>
<br>

<p><strong>1. 순열 검정 절차</strong></p>
<blockquote>
<p>a. 여러 그룹의 결과를 단일 데이터 집합으로 결합한다.
b. 결합된 데이터를 잘 섞은 후, 그룹 A와 동일한 크기의 표본을 무작위로(비복원) 추출한다.
c. 나머지 데이터에서 그룹 B와 동일한 크기의 샘플 무작위로(비복원) 추출한다.
d. C, D 등의 그룹에 대해서도 동일한 작업을 수행한다. 아제 원본 표본의 크기를 반영하는 재표본을 수집했다.
e. 원래 샘플(예를 들면 그룹 비율의 차이)에 대해 구한 통계량 또는 추정치가 무엇이었든간에 지금 추출한 재표본에 대해 모두 다시 계산하고 기록한다. 이것으로 한 번의 순열 반복이 진행된다. 
f. 앞선 단계들을 R번 반복하여 검정 통계량의 순열 분포를 얻는다.</p>
</blockquote>
<p><strong>2. 결론</strong></p>
<ul>
<li>순열과정에서 얻은 집합에서의 관찰된 차이가 대부분의 순열 분포 바깥에 있다면, 이것은 우연이 아니라고 결론 내릴 수 있다.</li>
<li>이 차이는 통계쩍으로 유의미하다.</li>
</ul>
<br>

<hr>
<br>

<h2 id="332-예제-웹-점착성"><strong>3.3.2 예제: 웹 점착성</strong></h2>
<br>

<blockquote>
<p>상대적으로 고가의 서비스를 제공하는 한 회사에서 두 가지 웹 디자인을 놓고 어느 쪽이 더 나은 판매 효과를 가져올지를 검증하려고 한다. 판매되는 서비스가 고가이다 보니 판매가 자주있지 않으며 판매 주기가 상당히 길다. 실제 매출 데이터를 충분히 얻는 데는 너무 오랜 시간이 걸려, 이를 통해 디자인의 우수성을 검증하기가 어렵다. 이런 이유로 이 회사는 서비스를 상세히 설명하는 내부 페이지의 이용을 대리변수로 사용하여 그 결과를 측정하기로 결정한다.</p>
</blockquote>
<p><strong>1. 웹 페이지 A와 B의 세션 시간</strong></p>
<ul>
<li>코드<pre><code class="language-python">import pandas as pd
import matplotlib.pyplot as plt
</code></pre>
</li>
</ul>
<p>url = &quot;<a href="https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/web_page_data.csv&quot;">https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/web_page_data.csv&quot;</a>
session_times = pd.read_csv(url)    </p>
<p>ax = session_times.boxplot(by = &#39;Page&#39;, column = &#39;Time&#39;)
ax.set_xlabel(&#39;&#39;)
ax.set_ylabel(&#39;Time (in seconds)&#39;)
plt.suptitle(&#39;&#39;)</p>
<pre><code>* 결과
![](https://velog.velcdn.com/images/all_young/post/51e4e8f6-7a10-4683-8896-a6b7dd95be44/image.png)

&lt;br&gt;

**2. 각 그룹의 평균 계산**
* 코드
```python
import pandas as pd

url = &quot;https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/web_page_data.csv&quot;
session_times = pd.read_csv(url)    

mean_a = session_times[session_times.Page == &#39;Page A&#39;].Time.mean()
mean_b = session_times[session_times.Page == &#39;Page B&#39;].Time.mean()
mean_b - mean_a</code></pre><ul>
<li>결과
<img src="https://velog.velcdn.com/images/all_young/post/71977566-7e55-4ce6-9281-7787d0d1371a/image.png" alt=""></li>
</ul>
<br>

<p><strong>3. 순열 겸정을 이용한 세션 시간의 차이에 대한 도수 분포</strong></p>
<ul>
<li>코드<pre><code class="language-python">import random
import pandas as pd
import matplotlib.pyplot as plt
</code></pre>
</li>
</ul>
<p>url = &quot;<a href="https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/web_page_data.csv&quot;">https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/web_page_data.csv&quot;</a>
session_times = pd.read_csv(url)    </p>
<p>def perm_fun(x, nA, nB):
  n = nA + nB
  idx_B = set(random.sample(range(n), nB))
  idx_A = set(range(n)) - idx_B
  return x.loc[idx_B].mean() - x.loc[idx_A].mean()</p>
<p>nA = 21
nB = 15</p>
<p>perm_diffs = [perm_fun(session_times.Time, nA, nB) for _ in range(1000)]</p>
<p>fig, ax = plt.subplots(figsize = (5, 5))
ax.hist(perm_diffs, bins = 11, rwidth = 0.9)
ax.axvline(x = mean_b - mean_a, color = &#39;black&#39;, lw = 2)
ax.text(5, 19, &#39;Observed\ndifference&#39;, bbox = {&#39;facecolor&#39;:&#39;white&#39;})
ax.set_xlabel(&#39;Session time differences (in seconds)&#39;)
ax.set_ylabel(&#39;Frequency&#39;)</p>
<pre><code>
* 결과
![](https://velog.velcdn.com/images/all_young/post/a32e1cd7-dc9f-40f3-a98b-da7d966fcdde/image.png)

**4. 새션 시간의 차이가 확률분포의 범위 내에 있음을 확인**
*코드
```python
import numpy as np

np.mean(np.array(perm_diffs) &gt; mean_b - mean_a)</code></pre><p>*결과
<img src="https://velog.velcdn.com/images/all_young/post/32fff4bf-f244-4f79-8e54-c4508630d94b/image.png" alt=""></p>
<br>

<hr>
<br>

<h2 id="333-전체-및-부트스트랩-순열검정"><strong>3.3.3 전체 및 부트스트랩 순열검정</strong></h2>
<br>

<p><strong>1. 순열 검정의 변종</strong></p>
<ul>
<li>전체순열검정(exhaustive permutation test)<blockquote>
<p>데이터를 부작위로 섞고 나누는 대신 실제로 나눌 수 있는 모든 가능한 조합을 찾는다.</p>
</blockquote>
</li>
<li>부트스트랩 순열검정(bootstrap permutation test)<blockquote>
<p>무작위 순열검정의 2단계와 3단계에서 비복원으로 하던 것을 복원 추출로 수행한다.</p>
</blockquote>
</li>
</ul>
<br>

<hr>
<br>

<h2 id="334-순열검정-데이터-과학의-최종-결론"><strong>3.3.4 순열검정: 데이터 과학의 최종 결론</strong></h2>
<br>

<ul>
<li>순열 검정에서는 여러 표본을 결합한 다음 잘 섞는다.</li>
<li>그런 다음 섞인 값들을 이용해 재표본추출 과정을 거쳐, 관심 있는 표본 통계량을 계산한다.</li>
<li>이 과정을 반복하고 재표본추출한 통계를 도표화한다.</li>
<li>관측된 통계량을 재표본추출한 분포와 비교하면 샘플 간에 관찰된 차이가 우연에 의한 것인지를 판단할 수 있다.</li>
</ul>
<br>

<hr>
<br>

<h1 id="34-통계적-유의성과-p값"><strong>3.4 통계적 유의성과 p값</strong></h1>
<br>

<p><strong>1. 용어 정리</strong></p>
<ul>
<li>p값(p-value): 귀무가성을 구체화한 기회 모델이 주어졌을 때 관측된 결과와 같이 특이하거나 극단적인 결과를 얻을 확률</li>
<li>알파(alpha): 실제 결과가 통계적으로 의미 있는 것으로 간주되기 위해, 우연에 의한 결과가 능가해야하는 &#39;비정상적인&#39; 가능성의 임계 확률</li>
<li>제 1종 오류(type 1 error): 우연에 의한 효과를 실제 효과라고 잘못 결론 내리는 것</li>
<li>제 2종 오류(type 2 error): 실제 효과를 우연에 의한 효과라고 잘못 결론 내리는 것</li>
</ul>
<br>

<p><strong>2. &#39;두 가격이 동일한 전환율을 공유하는지, 이 랜덤 변이가 5%만큼의 차이를 만들어낼 수 있는지&#39;에 대한 순열 절차</strong></p>
<blockquote>
<p>a. 0과 1이 적힌 카드를 박스에 넣는다. 그러면 전체 전환률은 45,945개의 0과 382개의 1이므로 0.00826 = 0.8246% 라고 할 수 있다.
크기 23,739(가격 A)의 표본을 섞어서 뽑고 그중 1이 몇 개인지 기록하자.
나머지 22,588개(가격 B)에서 1의 수를 기록하자.
1의 비율 차이를 기록하자.
2~4단계를 반복한다.
이 차이가 얼마나 자주 &gt;= 0.0368인가?</p>
</blockquote>
<br>

<p><strong>3. 예제: 전환율 차이에 대한 도수 분포</strong></p>
<ul>
<li>코드<pre><code class="language-python">import pandas as pd
import matplotlib.pyplot as plt
</code></pre>
</li>
</ul>
<p>def perm_fun(x, nA, nB):
  n = nA + nB
  idx_B = set(random.sample(range(n), nB))
  idx_A = set(range(n)) - idx_B
  return x.loc[idx_B].mean() - x.loc[idx_A].mean()</p>
<p>obs_pct_diff = 100 * (200 / 23739 - 182 / 22588)
print(f&#39;Observed difference: {obs_pct_diff:.4f}%&#39;)
conversion = [0] * 45945
conversion.extend([1] * 382)
conversion = pd.Series(conversion)</p>
<p>perm_diffs = [100 * perm_fun(conversion, 23739, 22588) for _ in range(1000)]</p>
<p>fig.ax = plt.subplots(figsize = (5, 5))
ax.hist(perm_diffs, bins = 11, rwidth = 0.9)
ax.axvline(x = obs_pct_diff, color = &#39;black&#39;, lw = 2)
ax.text(0.06, 200, &#39;Observed\ndifference&#39;, bbox = {&#39;facecolor&#39; : &#39;white&#39;})
ax.set_xlabel(&#39;Conversion rate (percent)&#39;)
ax.set_ylabel(&#39;Frequency&#39;)</p>
<pre><code>
* 결과
결과가 왜 안나올까
![](https://velog.velcdn.com/images/all_young/post/121bc121-44c6-4c46-b7f7-8b02e8fa8a56/image.png)


&lt;br&gt;

---

&lt;br&gt;

## **3.4.1 p값**

&lt;br&gt;

**1. p값**
* 통계적 유의성을 특정하기 위한 지표

* 코드
```python
import numpy as np

np.mean([diff &gt; obs_pct_diff for diff in perm_diffs])</code></pre><ul>
<li>결과
<img src="https://velog.velcdn.com/images/all_young/post/b47a7a4e-e329-45e8-922e-4a0b4bc666c1/image.png" alt=""></li>
</ul>
<br>

<p><strong>2. 정규 근사법 이용</strong></p>
<ul>
<li>코드<pre><code class="language-python">import scipy.stats as stats
import numpy as np
</code></pre>
</li>
</ul>
<p>survivors = np.array([[200, 23739 - 200], [182, 22588 - 182]])
chi2, p_value, df, _ = stats.chi2_contingency(survivors)</p>
<p>print(f&#39;p-value for single sided test: {p_value / 2:.4f}&#39;)</p>
<pre><code>* 결과
![](https://velog.velcdn.com/images/all_young/post/f789b950-f2f7-4f8f-8ac4-ae233154b2da/image.png)

&lt;br&gt;

---

&lt;br&gt;

## **3.4.2 유의 수준**

&lt;br&gt;

1. p 값은 이 데이터가 특정 통계 모델과 얼마나 상반되는지 나타낼 수 있다.
2. p 값은 연구 가설이 사실일 확률이나, 데이터가 랜덤하게 생성되었을 확률을 측정하는 것이 아니다.
3. 과학적 결론, 비즈니스나 정책 결정은 p값이 특정 임곗값을 통과하는지 여부를 기준으로 해서는 안 된다.
4. 적절한 추론을 위해서는 완전한 보고돠 투명성이 요구된다.
5. p 값 또는 통계적 유의성은 효과의 크기나 결과의 중요성을 의미하지 않는다.
6. p 값 그 자체는 모델이나 가설에 대한 증거를 측정하기 위한 좋은 지표가 아니다.

&lt;br&gt;

---

&lt;br&gt;

## **3.4.3 제 1종과 제 2종 오류**

&lt;br&gt;

* 1종 오류: 어떤 효과가 우연히 발생한 것인데, 그것이 사실이라고 잘못 판단하는 경우
* 2종 오류: 어떤 효과가 실제로 있는 것인데, 그것이 우연히 발생한 것이라고 잘못 판단하는 경우

&lt;br&gt;

---

&lt;br&gt;

## **3.4.4 데이터 과학과 p 값**

&lt;br&gt;

* 유의성검정은 관찰된 효과가 귀무가설 모형에 대한 무작위 변이의 범위 내에 있는지 결정하는 데 사용된다.
* p 값은 귀무가설로부터 나올 수 있는 결과가 관찰된 결과만큼 극단적으로 나타날 확률이다.
* 유의수준(알파)이란, 귀무가설 모델에서 &#39;비정상&#39;이라고 판단할 임곗값을 말한다.
* 유의성검정은 데이터 과학보다는 좀 더 공식적인 연구 보고와 관련이 있다.

&lt;br&gt;

---

피터 브루스, 앤드루 브루스의 **&lt;데이터 과학을 위한 통계(2판): 데이터 분석에서 머신러닝까지 50가지 핵심 개념&gt;** 을 읽고 정리한 내용입니다.


</code></pre>]]></description>
        </item>
    </channel>
</rss>