<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>곤약노트</title>
    <link>https://goneyak.tistory.com/</link>
    <description>안녕하세요, 약학 커뮤니케이터 곤약입니다 :)

#데이터사이언스 #헬스케어 #데이터갭 #약학지식 #약데이터
</description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 19:47:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>곤약처럼 부드럽게, 쫀쫀하게</managingEditor>
    <image>
      <title>곤약노트</title>
      <url>https://tistory1.daumcdn.net/tistory/7096206/attach/964b34788a244e6ab02a6364ed6fee47</url>
      <link>https://goneyak.tistory.com</link>
    </image>
    <item>
      <title>이미지 변환 (Image Transformation) ⑥Convolution과 Image Filtering</title>
      <link>https://goneyak.tistory.com/23</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;1. Convolution이란? &lt;/span&gt;이미지 처리의 핵심 연산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Convolution(합성곱)은 두 함수(예: &lt;u&gt;이미지와 필터&lt;/u&gt;)를 합쳐서 새로운 결과를 만들어내는 수학적 연산입니다. 이미지 처리에서는 이를 활용해 이미지에 다양한 효과를 줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748934090957&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;p&amp;gt;Continuous:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
$$(f * g)(t) = \int_{-\infty}^{\infty} f(\tau)\,g(t - \tau)\,d\tau$$
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Discrete:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
$$(f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n - m]$$
&amp;lt;/p&amp;gt;
&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Continuous:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$(f * g)(t) = \int_{-\infty}^{\infty} f(\tau)\,g(t - \tau)\,d\tau$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Discrete:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$(f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n - m]$$&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말하면, 이미지에서 일정한 패턴(마스크, 필터)을 기준으로 각 픽셀을 바꿔주는 과정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;2. Convolution의&amp;nbsp;활용&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 노이즈 제거 (Denoising)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 흐림 효과 (Blurring)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 샤프닝 (Sharpening)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엠보싱 (Embossing)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-엣지 검출 (Edge Detection)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;3. Image Filtering이란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 필터링(Image Filtering)은 &lt;b&gt;마스크(mask) 또는 커널(kernel)&lt;/b&gt;이라고 불리는 작은 행렬을 이미지에 적용(convolve)해서 새로운 이미지를 만들어내는 기법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;핵심 개념: &lt;b&gt;마스크(mask)&lt;br /&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;909&quot; data-start=&quot;881&quot;&gt;마스크는 작은 행렬 (예: 3x3, 5x5 등)&lt;/li&gt;
&lt;li data-end=&quot;945&quot; data-start=&quot;910&quot;&gt;각 픽셀 주변의 값을 읽고, 가중치를 곱해 새로운 값을 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Sharpening&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;[[0, -1, 0], [-1, 5, -1], [0, -1, 0]]&lt;/td&gt;
&lt;td&gt;경계 강조, 선명하게&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Blurring&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;1/9 * [[1,1,1],[1,1,1],[1,1,1]]&lt;/td&gt;
&lt;td&gt;부드럽게 흐림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Edge Detection&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;여러 종류 있음&lt;/td&gt;
&lt;td&gt;경계만 추출&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;4. Convolution 연산 방법 (with Mask)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 마스크를 좌우, 상하로 뒤집기 (flip)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 이미지의 각 위치에 마스크를 올림&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 각 대응되는 원소끼리 곱하고, 다 더함&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;4. 그 합을 결과 이미지의 해당 위치 픽셀로 지정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;중심 기준으로 주변 픽셀을 반영해 새로운 값을 계산하는 것!&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*경계 처리&lt;/b&gt;: Padding Convolution을 할 때, 이미지 가장자리는 마스크가 겹치기 어렵습니다. 그래서 보통 &lt;u&gt;가장자리를 0으로&lt;/u&gt; 채워서 이미지 크기를 유지합니다.&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3471&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qb1k5/btsOPbMxOxt/YEK1mMd0LDmXPoEohvfik1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qb1k5/btsOPbMxOxt/YEK1mMd0LDmXPoEohvfik1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qb1k5/btsOPbMxOxt/YEK1mMd0LDmXPoEohvfik1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqb1k5%2FbtsOPbMxOxt%2FYEK1mMd0LDmXPoEohvfik1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3471&quot; height=&quot;1000&quot; data-origin-width=&quot;3471&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czzT7L/btsOQTRanYZ/zDYqsdhJvS2KWoQJo6cbTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czzT7L/btsOQTRanYZ/zDYqsdhJvS2KWoQJo6cbTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czzT7L/btsOQTRanYZ/zDYqsdhJvS2KWoQJo6cbTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczzT7L%2FbtsOQTRanYZ%2FzDYqsdhJvS2KWoQJo6cbTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>OpenCV</category>
      <category>데이터분석</category>
      <category>데이터사이언스</category>
      <category>이미지변환</category>
      <category>이미지분석</category>
      <category>이미지전환</category>
      <category>이미지콘볼루션</category>
      <category>이미지프로세싱</category>
      <category>이미지필터링</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/23</guid>
      <comments>https://goneyak.tistory.com/23#entry23comment</comments>
      <pubDate>Fri, 11 Jul 2025 09:00:51 +0900</pubDate>
    </item>
    <item>
      <title>이미지 변환 (Image Transformation) ⑤이미지 향상 (Image Enchantment) 3종 비교</title>
      <link>https://goneyak.tistory.com/22</link>
      <description>&lt;p data-end=&quot;922&quot; data-start=&quot;787&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gray Level Transformation&lt;/b&gt;은 이미지의 픽셀 값을 수학적 함수로 변환해서 밝기를 조절하거나 대비를 높이는 기법입니다.&lt;br /&gt;이미지를 강조(enhancement)하거나 &lt;b&gt;특정 특징을 부각&lt;/b&gt;할 때 자주 사용됩니다.&lt;/p&gt;
&lt;p data-end=&quot;922&quot; data-start=&quot;787&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;922&quot; data-start=&quot;787&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;1.&amp;nbsp;Linear&amp;nbsp;(Negative&amp;nbsp;Image)&lt;/span&gt;&lt;/h3&gt;
&lt;div id=&quot;code_1748932981135&quot; data-ke-type=&quot;html&quot; data-source=&quot;\( g(x, y) = (L - 1) - f(x, y) \)&quot;&gt;\( g(x, y) = (L - 1) - f(x, y) \)&lt;/div&gt;
&lt;p data-end=&quot;922&quot; data-start=&quot;787&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1079&quot; data-start=&quot;1020&quot;&gt;밝은 부분은 어둡게, 어두운 부분은 밝게 반전 &amp;rarr; &lt;b&gt;음화 이미지(negative image)&lt;/b&gt; 생성&lt;/li&gt;
&lt;li data-end=&quot;1096&quot; data-start=&quot;1080&quot;&gt;흑백 필름 느낌 표현 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;2.&amp;nbsp;Log&amp;nbsp;Transformation&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748933099711&quot; data-ke-type=&quot;html&quot; data-source=&quot;\( g(x, y) = c \cdot \log(f(x, y) + 1) \)&quot;&gt;\( g(x, y) = c \cdot \log(f(x, y) + 1) \)&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;1169&quot; data-end=&quot;1200&quot;&gt;&lt;b&gt;어두운 영역을 강조&lt;/b&gt;하고 밝은 영역은 눌러줌&lt;/li&gt;
&lt;li data-start=&quot;1201&quot; data-end=&quot;1228&quot;&gt;영상에서 작은 세부사항을 살리고 싶을 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt; 3. Power-Law (Gamma) Transformation&lt;/span&gt;&lt;/h3&gt;
&lt;div id=&quot;code_1748933115959&quot; data-ke-type=&quot;html&quot; data-source=&quot; \( g(x, y) = c \cdot f(x, y)^{\gamma} \)&quot;&gt;\( g(x, y) = c \cdot f(x, y)^{\gamma} \)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1350&quot; data-start=&quot;1312&quot;&gt;감마 보정(gamma correction)이라고도 불림&lt;/li&gt;
&lt;li data-end=&quot;1381&quot; data-start=&quot;1351&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;gamma;&amp;lt;1&lt;/span&gt;&lt;/span&gt;: 이미지 &lt;b&gt;밝게&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1411&quot; data-start=&quot;1382&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;gamma;&amp;gt;1&lt;/span&gt;&lt;/span&gt;: 이미지 &lt;b&gt;어둡게&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750777100015&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;image_gray = cv2.imread('watermelon.jpg', cv2.IMREAD_GRAYSCALE)

# 1. 음화 이미지 (Negative)
negative = 255 - image_gray

# 2. 로그 변환
c = 255 / np.log(1 + np.max(image_gray))
log_transformed = c * np.log(1 + image_gray.astype(np.float32))
log_transformed = np.uint8(np.clip(log_transformed, 0, 255))

# 3. 감마 보정 (&amp;gamma; &amp;lt; 1 밝게, &amp;gamma; &amp;gt; 1 어둡게)
gamma = 0.5  # 예: 밝게
gamma_corrected = 255 * ((image_gray / 255) ** gamma)
gamma_corrected = np.uint8(np.clip(gamma_corrected, 0, 255))

plt.figure(figsize=(12, 6))

plt.subplot(1, 4, 1)
plt.imshow(image_gray, cmap='gray')
plt.title('Original')
plt.axis('off')

plt.subplot(1, 4, 2)
plt.imshow(negative, cmap='gray')
plt.title('Negative Image')
plt.axis('off')

plt.subplot(1, 4, 3)
plt.imshow(log_transformed, cmap='gray')
plt.title('Log Transform')
plt.axis('off')

plt.subplot(1, 4, 4)
plt.imshow(gamma_corrected, cmap='gray')
plt.title(f'Gamma Correction (&amp;gamma;={gamma})')
plt.axis('off')

plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sjuHB/btsOPbsgHpn/PLkXFzdKOq6MGDFRu4yHv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sjuHB/btsOPbsgHpn/PLkXFzdKOq6MGDFRu4yHv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sjuHB/btsOPbsgHpn/PLkXFzdKOq6MGDFRu4yHv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsjuHB%2FbtsOPbsgHpn%2FPLkXFzdKOq6MGDFRu4yHv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1928&quot; height=&quot;534&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eH22f4/btsOPvqtBMr/Vp59FGQgBWc4sB5zIGt1zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eH22f4/btsOPvqtBMr/Vp59FGQgBWc4sB5zIGt1zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eH22f4/btsOPvqtBMr/Vp59FGQgBWc4sB5zIGt1zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeH22f4%2FbtsOPvqtBMr%2FVp59FGQgBWc4sB5zIGt1zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>data</category>
      <category>data science</category>
      <category>high dimensional data analysis</category>
      <category>OpenCV</category>
      <category>데이터사이언스</category>
      <category>이미지분석</category>
      <category>이미지프로세싱</category>
      <category>이미지향상</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/22</guid>
      <comments>https://goneyak.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 8 Jul 2025 09:00:11 +0900</pubDate>
    </item>
    <item>
      <title>이미지 변환 (Image Transformation) ④Gray Level Resolution (Bit Depth) 완전 이해하기</title>
      <link>https://goneyak.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;디지털&amp;nbsp;이미지에서&amp;nbsp;Gray&amp;nbsp;level&amp;nbsp;resolution이란&amp;nbsp;&lt;b&gt;회색조의&amp;nbsp;단계&amp;nbsp;수&lt;/b&gt;,&amp;nbsp;즉&amp;nbsp;&lt;b&gt;밝기를&amp;nbsp;얼마나&amp;nbsp;세밀하게&amp;nbsp;표현할&amp;nbsp;수&amp;nbsp;있는가&lt;/b&gt;를 의미합니다. 이 정밀도는 &lt;u&gt;1픽셀당 몇 비트를 사용하는가(bits per pixel, bpp)에&lt;/u&gt; 따라 결정됩니다.&lt;/p&gt;
&lt;div id=&quot;code_1748932628672&quot; data-ke-type=&quot;html&quot; data-source=&quot; \( L = 2^{\text{bpp}} \)&quot;&gt;\( L = 2^{\text{bpp}} \)&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;399&quot; data-start=&quot;367&quot;&gt;&lt;b&gt;bpp&lt;/b&gt;: 한 픽셀을 표현하는 데 쓰이는 비트 수&lt;/li&gt;
&lt;li data-end=&quot;436&quot; data-start=&quot;400&quot;&gt;&lt;b&gt;L&lt;/b&gt;: 표현 가능한 밝기 단계 수 (gray level)&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 45.1163%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignCenter&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;bbp&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8019%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;표현 가능한 단계 수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8019%; height: 21px;&quot;&gt;2단계 (0, 1) = 흑백만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8019%; height: 21px;&quot;&gt;256단계 (0~255) = 일반 회색조 이미지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.83721%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8019%; height: 21px;&quot;&gt;16단계 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*bit depth가 높을수록 더 부드러운 이미지&lt;/b&gt;, 낮을수록 정보가 손실된 이미지&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1750776665656&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1. Grayscale 이미지 불러오기
image = cv2.imread('watermelon.jpg', cv2.IMREAD_GRAYSCALE)

# 2. 서로 다른 bit depth로 양자화 (비트 수 감소)
def quantize(image, bpp):
    levels = 2 ** bpp
    step = 256 // levels
    quantized = (image // step) * step
    return quantized

bpp_values = [1, 2, 4, 8]
quantized_images = [quantize(image, bpp) for bpp in bpp_values]

# 3. 시각화
plt.figure(figsize=(12, 6))
for i, (img, bpp) in enumerate(zip(quantized_images, bpp_values)):
    plt.subplot(1, len(bpp_values), i+1)
    plt.imshow(img, cmap='gray', vmin=0, vmax=255)
    plt.title(f'{bpp}-bit ({2**bpp} levels)')
    plt.axis('off')

plt.suptitle('Gray Level Resolution by Bit Depth')
plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jy4mq/btsOPXG4AoS/UV3bnhXmJzEzqh8XQcp6A1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jy4mq/btsOPXG4AoS/UV3bnhXmJzEzqh8XQcp6A1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jy4mq/btsOPXG4AoS/UV3bnhXmJzEzqh8XQcp6A1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJy4mq%2FbtsOPXG4AoS%2FUV3bnhXmJzEzqh8XQcp6A1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1928&quot; height=&quot;750&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baxsmr/btsOPo6bZoR/Iy7HPdrIC12mIJHFQlsZn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baxsmr/btsOPo6bZoR/Iy7HPdrIC12mIJHFQlsZn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baxsmr/btsOPo6bZoR/Iy7HPdrIC12mIJHFQlsZn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbaxsmr%2FbtsOPo6bZoR%2FIy7HPdrIC12mIJHFQlsZn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>bbp</category>
      <category>bit depth</category>
      <category>bitdepth</category>
      <category>gray level resolution</category>
      <category>OpenCV</category>
      <category>고차원데이터분석</category>
      <category>데이터분석</category>
      <category>데이터사이언스</category>
      <category>이미지분석</category>
      <category>이미지프로세싱</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/21</guid>
      <comments>https://goneyak.tistory.com/21#entry21comment</comments>
      <pubDate>Sat, 5 Jul 2025 09:00:15 +0900</pubDate>
    </item>
    <item>
      <title>이미지 변환 (Image Transformation) ③대비 높이기 &amp;ndash; 히스토그램 스트레칭 (Stretching Histogram)</title>
      <link>https://goneyak.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이미지의 대비(contrast)가 흐릿하게 느껴질 때가 있죠? 사진 전체가 뿌옇거나, 명암이 애매할 때 말이에요. 이런 경우에 히스토그램 스트레칭(histogram stretching)을 통해 &lt;b&gt;이미지의 대비를 높여줄 수&lt;/b&gt; 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;대비(Contrast)란?&lt;/b&gt;&lt;br /&gt;대비는 이미지에서 가장 밝은 픽셀과 가장 어두운 픽셀의 차이를 의미&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;Contrast = 최대 픽셀값&amp;minus;최소 픽셀값&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;*대비가 크면 선명한 이미지, 대비가 작으면 뿌연 이미지&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;히스토그램 스트레칭 (Histogram Stretching)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히스토그램&amp;nbsp;스트레칭은&amp;nbsp;픽셀&amp;nbsp;값의&amp;nbsp;범위를&amp;nbsp;넓혀서&amp;nbsp;대비를&amp;nbsp;강화하는&amp;nbsp;방법입니다.&amp;nbsp;&lt;b&gt;밝기는&amp;nbsp;그대로&amp;nbsp;두고&lt;/b&gt;,&amp;nbsp;&lt;u&gt;밝은&amp;nbsp;부분은&amp;nbsp;더&amp;nbsp;밝게,&amp;nbsp;어두운&amp;nbsp;부분은&amp;nbsp;더&amp;nbsp;어둡게&amp;nbsp;&lt;/u&gt;늘려주는&amp;nbsp;것이&amp;nbsp;핵심&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748931931674&quot; data-ke-type=&quot;html&quot; data-source=&quot;$$g(x,y) = T(f(x,y)) = \left( \frac{f(x,y) - \min(f)}{\max(f) - \min(f)} \right) \times \lambda$$&quot;&gt;$$g(x,y) = T(f(x,y)) = \left( \frac{f(x,y) - \min(f)}{\max(f) - \min(f)} \right) \times \lambda$$&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;878&quot; data-start=&quot;751&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;790&quot; data-start=&quot;751&quot;&gt;&lt;span&gt;&lt;span&gt;f(x,y)&lt;/span&gt;&lt;/span&gt;: 원본 이미지에서 (x, y)의 픽셀 값&lt;/li&gt;
&lt;li data-end=&quot;838&quot; data-start=&quot;791&quot;&gt;&lt;span&gt;&lt;span&gt;min⁡(f)&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;: 이미지 전체 픽셀 중 최소/최대 값&lt;/li&gt;
&lt;li data-end=&quot;878&quot; data-start=&quot;839&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;lambda;&lt;/span&gt;&lt;/span&gt;: 스트레칭 후 확장할 범위 (보통 255) (*&amp;lambda; 값이 클수록 픽셀의 분포가 더 넓게 퍼지고, 대비가 향상)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748931909714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1. 이미지 불러오기 (흑백 모드)
image = cv2.imread('watermelon.jpg', cv2.IMREAD_GRAYSCALE)

# 2. 원본 이미지의 최소값과 최대값 계산
min_val = np.min(image)
max_val = np.max(image)

# 3. 스트레칭 공식 적용 (픽셀 값 범위를 [0, 255]로 선형 변환)
lambda_ = 200
stretched = ((image - min_val) / (max_val - min_val)) * lambda_
stretched = np.clip(stretched, 0, 255).astype(np.uint8)

# 4. 시각화 (원본 vs 스트레칭 결과 vs 히스토그램)
plt.figure(figsize=(12, 5))

# 원본
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Grayscale')
plt.axis('off')

# 스트레칭 적용 이미지
plt.subplot(1, 3, 2)
plt.imshow(stretched, cmap='gray')
plt.title('Contrast Stretched (lambda = 200)')
plt.axis('off')

# 히스토그램
plt.subplot(1, 3, 3)
plt.hist(stretched.ravel(), bins=256, range=[0, 256], color='gray')
plt.title('Histogram after Stretching')
plt.xlabel('Pixel Intensity (0&amp;ndash;255)')
plt.ylabel('Frequency')

plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/riIZ9/btsOKG0oOJ5/G6KhELdLCsFmUs4FvOvgU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/riIZ9/btsOKG0oOJ5/G6KhELdLCsFmUs4FvOvgU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/riIZ9/btsOKG0oOJ5/G6KhELdLCsFmUs4FvOvgU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FriIZ9%2FbtsOKG0oOJ5%2FG6KhELdLCsFmUs4FvOvgU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2206&quot; height=&quot;898&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyHyja/btsOMj3SBG1/oJktGRwIfQW8KqWHfTHB61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyHyja/btsOMj3SBG1/oJktGRwIfQW8KqWHfTHB61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyHyja/btsOMj3SBG1/oJktGRwIfQW8KqWHfTHB61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyHyja%2FbtsOMj3SBG1%2FoJktGRwIfQW8KqWHfTHB61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>data science</category>
      <category>OpenCV</category>
      <category>고차원데이터분석</category>
      <category>데이터분석</category>
      <category>데이터사이언스</category>
      <category>이미지대비</category>
      <category>이미지데이터분석</category>
      <category>이미지변환</category>
      <category>이미지스트레칭</category>
      <category>이미지프로세싱</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/20</guid>
      <comments>https://goneyak.tistory.com/20#entry20comment</comments>
      <pubDate>Wed, 2 Jul 2025 09:00:43 +0900</pubDate>
    </item>
    <item>
      <title>이미지 변환 (Image Transformation) ②밝기 조절하기 &amp;ndash; 히스토그램 이동 (Histogram Shifting)</title>
      <link>https://goneyak.tistory.com/19</link>
      <description>&lt;p data-end=&quot;257&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;이미지의 &lt;b&gt;밝기(brightness)&lt;/b&gt;를 조절하고 싶을 때 어떻게 해야 할까요? 가장 직관적이고 쉬운 방법 중 하나가 바로 히스토그램 이동(Histogram Shifting)입니다.&lt;/p&gt;
&lt;p data-end=&quot;257&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;352&quot; data-start=&quot;281&quot; data-ke-size=&quot;size16&quot;&gt;앞선 포스팅에서 설명 드린대로 이미지의 히스토그램이란, &lt;b&gt;각 밝기 값(0~255)이 이미지에 얼마나 자주 등장하는지를 막대 그래프로 표현한 것&lt;/b&gt;이에요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;388&quot; data-start=&quot;353&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;370&quot; data-start=&quot;353&quot;&gt;왼쪽: 어두운 픽셀 많음&lt;/li&gt;
&lt;li data-end=&quot;388&quot; data-start=&quot;371&quot;&gt;오른쪽: 밝은 픽셀 많음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;픽셀 값을 전체적으로 &lt;b&gt;상수 S&lt;/b&gt;만큼 더하거나 빼면, 이미지가 밝아지거나 어두워집니다.&lt;/p&gt;
&lt;div id=&quot;code_1748930996819&quot; data-ke-type=&quot;html&quot; data-source=&quot;$$
g(x, y) = T(f(x, y)) =
\begin{cases}
U &amp;amp; \text{if } f(x, y) &amp;gt; U - S \\
f(x, y) + S &amp;amp; \text{otherwise} \\
L &amp;amp; \text{if } f(x, y) \leq L - S
\end{cases}
$$&quot;&gt;$$ g(x, y) = T(f(x, y)) = \begin{cases} U &amp;amp; \text{if } f(x, y) &amp;gt; U - S \\ f(x, y) + S &amp;amp; \text{otherwise} \\ L &amp;amp; \text{if } f(x, y) \leq L - S \end{cases} $$&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;810&quot; data-start=&quot;659&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;692&quot; data-start=&quot;659&quot;&gt;&lt;span&gt;&lt;span&gt;f(x,y)&lt;/span&gt;&lt;/span&gt;: 원본 이미지에서의 밝기 값&lt;/li&gt;
&lt;li data-end=&quot;725&quot; data-start=&quot;693&quot;&gt;&lt;span&gt;&lt;span&gt;g(x,y)&lt;/span&gt;&lt;/span&gt;: 밝기 조절된 결과 이미지&lt;/li&gt;
&lt;li data-end=&quot;767&quot; data-start=&quot;726&quot;&gt;&lt;span&gt;&lt;span&gt;S&lt;/span&gt;&lt;/span&gt;: 밝기 변화 정도 (양수 = 밝게, 음수 = 어둡게)&lt;/li&gt;
&lt;li data-end=&quot;810&quot; data-start=&quot;768&quot;&gt;&lt;span&gt;&lt;span&gt;L=0, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;255&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;: 픽셀 값의 최소, 최대&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748931098884&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt
import cv2

# 이미지 불러오기 및 Grayscale 변환
image = cv2.imread('watermelon.jpg', cv2.IMREAD_GRAYSCALE)

# 밝기 이동: [25, 225] 범위 내 픽셀만 +50
shifted = image.copy().astype(np.int32)
mask = (shifted &amp;gt;= 25) &amp;amp; (shifted &amp;lt;= 225)
shifted[mask] += 50
shifted = np.clip(shifted, 0, 255).astype(np.uint8)

# 이미지 및 히스토그램 시각화
plt.figure(figsize=(12, 5))

# 1. 원본 그레이스케일 이미지
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Grayscale')
plt.axis('off')

# 2. 밝기 이동된 이미지
plt.subplot(1, 3, 2)
plt.imshow(shifted, cmap='gray')
plt.title('Histogram Shifted (+50)')
plt.axis('off')

# 3. 히스토그램
plt.subplot(1, 3, 3)
plt.hist(shifted.ravel(), bins=256, range=[0, 256], color='gray')
plt.title('Histogram (Shifted)')
plt.xlabel('Pixel Intensity (0&amp;ndash;255)')
plt.ylabel('Frequency')

plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfYVM/btsOK65BVI4/Q9jU9kEy3ufB6Pc1zp2bC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfYVM/btsOK65BVI4/Q9jU9kEy3ufB6Pc1zp2bC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfYVM/btsOK65BVI4/Q9jU9kEy3ufB6Pc1zp2bC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfYVM%2FbtsOK65BVI4%2FQ9jU9kEy3ufB6Pc1zp2bC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2206&quot; height=&quot;898&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBFxek/btsOMFMotDt/B1R8nkdFwvBtOXHxAyXz1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBFxek/btsOMFMotDt/B1R8nkdFwvBtOXHxAyXz1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBFxek/btsOMFMotDt/B1R8nkdFwvBtOXHxAyXz1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBFxek%2FbtsOMFMotDt%2FB1R8nkdFwvBtOXHxAyXz1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>Data Analysis</category>
      <category>image processing</category>
      <category>OpenCV</category>
      <category>Python</category>
      <category>고차원데이터분석</category>
      <category>데이터사이언스</category>
      <category>이미지밝기조절</category>
      <category>이미지변환</category>
      <category>이미지분석</category>
      <category>이미지처리</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/19</guid>
      <comments>https://goneyak.tistory.com/19#entry19comment</comments>
      <pubDate>Sun, 29 Jun 2025 07:00:01 +0900</pubDate>
    </item>
    <item>
      <title>이미지 변환 (Image Transformation) ①임계값 처리 (Thresholding)로 흑백 이미지 만들기</title>
      <link>https://goneyak.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;디지털 이미지 처리의 가장 기본적인 변환 방법 중 하나는 바로 임계값 처리(Thresholding)입니다. 이 방법은 &lt;b&gt;회색조(grayscale)&lt;/b&gt; 이미지를 &lt;b&gt;흑백(black &amp;amp; white)&lt;/b&gt; 이미지로 바꿔주는 간단하면서도 매우 유용한 기법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt; 회색조(grayscale)&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; ▶ Thresholing ▶ &lt;/span&gt;흑백(black &amp;amp; white)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Thresholding이란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임계값 처리란, 픽셀의 밝기 값이 어떤 기준 값(임계값 p)보다 크면 흰색(1)으로, 작거나 같으면 검은색(0)으로 이진화(Binarization) 시키는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748930402709&quot; data-ke-type=&quot;html&quot; data-source=&quot;$$
g(x, y) = T(f(x, y)) =
\begin{cases}
1 &amp;amp; \text{if } f(x, y) &amp;gt; p \\
0 &amp;amp; \text{if } f(x, y) \leq p
\end{cases}
$$
&quot;&gt;$$ g(x, y) = T(f(x, y)) = \begin{cases} 1 &amp;amp; \text{if } f(x, y) &amp;gt; p \\ 0 &amp;amp; \text{if } f(x, y) \leq p \end{cases} $$&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;404&quot; data-start=&quot;360&quot;&gt;&lt;span&gt;&lt;span&gt;f(x,y)&lt;/span&gt;&lt;/span&gt;: 원본 이미지에서 (x, y) 위치의 픽셀 밝기&lt;/li&gt;
&lt;li data-end=&quot;434&quot; data-start=&quot;405&quot;&gt;&lt;span&gt;&lt;span&gt;g(x,y)&lt;/span&gt;&lt;/span&gt;: 변환된 출력 이미지&lt;/li&gt;
&lt;li data-end=&quot;470&quot; data-start=&quot;435&quot;&gt;&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;: 기준이 되는 임계값 (threshold)&lt;/li&gt;
&lt;li data-end=&quot;525&quot; data-start=&quot;471&quot;&gt;수식에 따라 &lt;span&gt;&lt;span&gt;f(x,y)&lt;/span&gt;&lt;/span&gt;가 &lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;보다 크면 흰색(1), 아니면 검정색(0)&lt;/li&gt;
&lt;li data-end=&quot;525&quot; data-start=&quot;471&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1750542612541&quot; class=&quot;lsl&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import cv2
import matplotlib.pyplot as plt

# 1. 이미지 불러오기 (흑백 모드)
image = cv2.imread('watermelon.jpg', cv2.IMREAD_GRAYSCALE)

# 2. 임계값 처리 (Thresholding)
threshold_value = 127
_, binary_image = cv2.threshold(image, threshold_value, 255, cv2.THRESH_BINARY)

# 3. 이미지 및 히스토그램 시각화
plt.figure(figsize=(12, 5))

# 그레이스케일 이미지
plt.subplot(1, 3, 1)
plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')

# 임계값 처리 이미지
plt.subplot(1, 3, 2)
plt.title(f&quot;Thresholded (p = {threshold_value})&quot;)
plt.imshow(binary_image, cmap='gray')
plt.axis('off')

# 히스토그램
plt.subplot(1, 3, 3)
plt.hist(binary_image.ravel(), bins=256, range=[0, 256])
plt.title('Histogram')
plt.xlabel('Pixel Intensity (0~255)')
plt.ylabel('Frequency')

plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pVo23/btsOL2Iivlz/T2KDCxFkdb2kLra3cDjU31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pVo23/btsOL2Iivlz/T2KDCxFkdb2kLra3cDjU31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pVo23/btsOL2Iivlz/T2KDCxFkdb2kLra3cDjU31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpVo23%2FbtsOL2Iivlz%2FT2KDCxFkdb2kLra3cDjU31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2206&quot; height=&quot;898&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J7emg/btsOLte8C8j/6x4kzRozlQ4r1U6D0vAjiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J7emg/btsOLte8C8j/6x4kzRozlQ4r1U6D0vAjiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J7emg/btsOLte8C8j/6x4kzRozlQ4r1U6D0vAjiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ7emg%2FbtsOLte8C8j%2F6x4kzRozlQ4r1U6D0vAjiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>datascience</category>
      <category>high dimensional data anlaysis</category>
      <category>OpenCV</category>
      <category>thresholding</category>
      <category>고차원데이터분석</category>
      <category>데이터사이언스</category>
      <category>이미지임계값처리</category>
      <category>이미지처리</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/18</guid>
      <comments>https://goneyak.tistory.com/18#entry18comment</comments>
      <pubDate>Thu, 26 Jun 2025 09:00:17 +0900</pubDate>
    </item>
    <item>
      <title>이미지 처리 (Image Processing) #개요</title>
      <link>https://goneyak.tistory.com/17</link>
      <description>&lt;p data-end=&quot;295&quot; data-start=&quot;141&quot; data-ke-size=&quot;size16&quot;&gt;오늘날 우리가 사용하는 다양한 서비스 ― 얼굴 인식, 자율 주행, 의료 영상 진단, 감시 시스템 ― 모두 &lt;b&gt;이미지 분석(Image Analysis)&lt;/b&gt; 기술을 바탕으로 작동합니다. 이미지 분석이란 단순히 사진을 보는 것을 넘어, 사진 속 정보를 이해하고 해석하는 과정입니다.&lt;/p&gt;
&lt;p data-end=&quot;295&quot; data-start=&quot;141&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;425&quot; data-start=&quot;297&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 이미지 분석이 어떻게 이루어지는지 그 &lt;b&gt;단계별 흐름&lt;/b&gt;을 소개하고, 컴퓨터가 실제 이미지를 어떻게 인식하는지를 간단하게 설명한 뒤, 오픈소스 이미지 처리 라이브러리인 &lt;b&gt;OpenCV&lt;/b&gt;에 대해서도 다루어 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;1. 이미지 분석 개요 (Image Analysis Levels)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지&amp;nbsp;분석은&amp;nbsp;크게&amp;nbsp;4단계로&amp;nbsp;나눌&amp;nbsp;수&amp;nbsp;있습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Level 0&lt;/b&gt;: 이미지 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제&amp;nbsp;세계의&amp;nbsp;이미지를&amp;nbsp;컴퓨터가&amp;nbsp;인식할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;처리하는&amp;nbsp;단계입니다.&amp;nbsp;이&amp;nbsp;과정에는&amp;nbsp;이미지의&amp;nbsp;획득(acquisition),&amp;nbsp;샘플링(sampling),&amp;nbsp;양자화(quantization),&amp;nbsp;압축(compression)&amp;nbsp;등이&amp;nbsp;포함됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Level 1&lt;/b&gt;: 이미지 간 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;촬영된 이미지 자체를 개선하거나 특정 정보를 추출하기 위한 단계로, &lt;b&gt;이미지 향상(enhancement)&lt;/b&gt;, &lt;b&gt;필터링(filtering)&lt;/b&gt;, &lt;b&gt;복원(restoration)&lt;/b&gt;, &lt;b&gt;스무딩(smoothing)&lt;/b&gt;, &lt;b&gt;세분화(segmentation)&lt;/b&gt; 등을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Level 2&lt;/b&gt;: 이미지 &amp;rarr; 벡터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지에서 의미 있는 정보를 숫자 벡터 형태로 뽑아내는 단계로, 특징 추출(feature extraction)과 차원 축소(dimension reduction)가 이뤄집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Level 3&lt;/b&gt;: 특징 &amp;rarr; 의사결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 얻은 벡터를 바탕으로 컴퓨터가 &lt;b&gt;판단 또는 분류&lt;/b&gt;를 수행합니다. 예: 얼굴인지 아닌지, 질병이 있는지 여부 등.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;2. 이미지란 무엇인가?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 아날로그 이미지 (Analog Image)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자연계에 존재하는 빛의 강도 함수 (light intensity function)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Grayscale (회색조) 이미지: f(x1, x2) &amp;rarr; 위치 (x1, x2)에서 밝기를 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Color (RGB) 이미지: f(x1, x2, c), c &amp;isin; {R, G, B}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 디지털 이미지 (Digital Image)★&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이미지를 2D 또는 3D 이산배열로 표현한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 즉, 실제 아날로그 이미지를 샘플링하고 양자화 시켜 &lt;span style=&quot;background-color: #f3c000;&quot;&gt;픽셀&lt;/span&gt;로 나눔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;u&gt;디지털 이미지의 기본 요소&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. 픽셀 (Pixel)&lt;/b&gt;: 이미지의 최소 단위&lt;br /&gt;&amp;nbsp;- 디지털 이미지에서 하나의 샘플 값 (즉, 배열의 원소)&lt;br /&gt;- 하나의 픽셀은 하나의 색상 정보를 담고 있고, 이 수많은 픽셀들이 모여서 하나의 이미지가 됨&lt;br /&gt;- 숫자가 클수록 더 밝음&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. 해상도 (Resolution)&lt;/b&gt;: 픽셀 수 &lt;br /&gt;- 해상도는 이미지에 포함된 픽셀의 총 수 &lt;br /&gt;- 해상도가 높을수록 더 정교하고 선명한 이미지&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. 채널 (Channel)&lt;/b&gt;: 색상의 구성 요소 &lt;br /&gt;- 이미지의 색상은 여러 채널의 조합으로 표현&lt;br /&gt;- Grayscale: 1개의 채널 (밝기 정보만 존재) &lt;br /&gt;- RGB: 3개의 채널 (빨강 Red, 초록 Green, 파랑 Blue)&lt;br /&gt;- RGBA: 4개의 채널 (RGB + 투명도 Alpha)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. 비트 깊이 (Bit Depth)&lt;/b&gt;: 색상의 정밀도 &lt;br /&gt;- 비트 깊이는 한 픽셀이 가질 수 있는 색상의 정밀도를 의미&lt;br /&gt;예시) 8-bit 이미지: 각 채널당 0~255의 값을 가짐&lt;br /&gt;&lt;i&gt;&amp;rarr; RGB 이미지라면 256(R) &amp;times; 256(G) &amp;times; 256(B) = &lt;b&gt;약 1670만 가지 색&lt;/b&gt; 표현 가능 &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. 컬러 공간 (Color Space):&lt;/b&gt; 색을 수학적으로 정의하는 방식 (RGB, BRG, Grayscale, HSV, YCbCr)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;3. 이미지의 shape 구조&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Python의 NumPy나 OpenCV로 이미지를 다룰 때, 이미지의 구조는 일반적으로 다음과 같은 3차원 배열입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(height, width, channel)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;image.shape = (480, 640, 3) &amp;rarr; 세로 480픽셀, 가로 640픽셀, 그리고 3개의 채널(RGB)로 구성된 이미지라는 뜻&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;image.shape = (480, 640) &amp;rarr; 채널이 없으므로 그레이스케일 이미지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;4. 이미지 히스토그램 (Image Histogram)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히스토그램은 이미지의 gray level (밝기 값) 분포를 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 픽셀 x[m, n]에 대해, 특정 밝기 I를 가지는 픽셀의 개수를 카운트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x축: 픽셀 값 (0 - 255, 8 bit grayscale)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;y축: 해당 픽셀 값을 가진 픽셀 개수 (frequency)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 히스토그램은 기본적으로 확률 밀도 함수(pdf)를 근사함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이미지의 명암 분포를 시각적으로 보여주며, 밝기 조절 및 대비 조절 등 이미지 향상 작업의 기초가 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;4. OpenCV&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1640&quot; data-start=&quot;1559&quot; data-ke-size=&quot;size16&quot;&gt;OpenCV(Open Source Computer Vision)는 컴퓨터 비전 및 이미지 처리를 위한 강력한 오픈소스 라이브러리입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1745&quot; data-start=&quot;1641&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1681&quot; data-start=&quot;1641&quot;&gt;다양한 &lt;b&gt;이미지 필터링, 얼굴 인식, 모션 추적&lt;/b&gt; 기능을 지원&lt;/li&gt;
&lt;li data-end=&quot;1721&quot; data-start=&quot;1682&quot;&gt;Python, C++, Java 등 여러 언어로 사용할 수 있음&lt;/li&gt;
&lt;li data-end=&quot;1745&quot; data-start=&quot;1722&quot;&gt;머신러닝 및 딥러닝과도 쉽게 연동 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1745&quot; data-start=&quot;1641&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1745&quot; data-start=&quot;1722&quot;&gt;OpenCV도 이미지 데이터를 NumPy 배열로 저장하지만 색 채널의 순서가 R-G-B 순서가 아니라, &lt;u&gt;B-G-R 순서&lt;/u&gt;로 뒤바뀌어 있다는 점에 주의.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748927492963&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예시 코드

import cv2
import matplotlib.pyplot as plt

# 1. 이미지 불러오기 (컬러)
image = cv2.imread('watermelon.jpg')  # BGR 포맷으로 불러옴

# 2. BGR -&amp;gt; RGB로 변환 (matplotlib은 RGB 사용)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 3. 그레이스케일 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 4. 히스토그램 계산
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

# 5. 이미지 및 히스토그램 시각화
plt.figure(figsize=(12, 5))

# 원본 이미지
plt.subplot(1, 3, 1)
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')

# 그레이스케일 이미지
plt.subplot(1, 3, 2)
plt.imshow(gray, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')

# 히스토그램
plt.subplot(1, 3, 3)
plt.hist(gray.ravel(), bins=256, range=[0, 256])
plt.title('Histogram')
plt.xlabel('Pixel Intensity (0~255)')
plt.ylabel('Frequency')

plt.tight_layout()
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddzU3I/btsOL82AaFx/PnVCEop8QxNtjgalwTqhyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddzU3I/btsOL82AaFx/PnVCEop8QxNtjgalwTqhyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddzU3I/btsOL82AaFx/PnVCEop8QxNtjgalwTqhyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddzU3I%2FbtsOL82AaFx%2FPnVCEop8QxNtjgalwTqhyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2206&quot; height=&quot;898&quot; data-origin-width=&quot;2206&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpZLIm/btsOmWP2XRD/yul3Dop4GYecgyckHh6dFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpZLIm/btsOmWP2XRD/yul3Dop4GYecgyckHh6dFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpZLIm/btsOmWP2XRD/yul3Dop4GYecgyckHh6dFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpZLIm%2FbtsOmWP2XRD%2Fyul3Dop4GYecgyckHh6dFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/High-Dimensional Data Analytics</category>
      <category>data science</category>
      <category>high dimensional analysis</category>
      <category>OpenCV</category>
      <category>고차원분석</category>
      <category>데이터사이언스</category>
      <category>이미지분석</category>
      <category>이미지처리</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/17</guid>
      <comments>https://goneyak.tistory.com/17#entry17comment</comments>
      <pubDate>Mon, 23 Jun 2025 09:00:37 +0900</pubDate>
    </item>
    <item>
      <title>시뮬레이션 (Simulation) #일반 원칙</title>
      <link>https://goneyak.tistory.com/16</link>
      <description>&lt;h3 data-end=&quot;953&quot; data-start=&quot;879&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;1. 시뮬레이션 연구 11단계&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;563&quot; data-start=&quot;492&quot; data-ke-size=&quot;size16&quot;&gt;시뮬레이션 프로젝트는 단순한 코딩이 아니라, &lt;b&gt;문제를 정의하고 가설을 실험해보고 해석까지 이르는&lt;/b&gt; 하나의 과학적 절차&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1002&quot; data-start=&quot;565&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;610&quot; data-start=&quot;565&quot;&gt;&lt;b&gt;문제 정의 (Problem Formulation)&lt;/b&gt;: 어떤 문제가 있는가? (예: 대기시간이 너무 길다!)&lt;/li&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;611&quot;&gt;&lt;b&gt;목표 설정 &amp;amp; 계획 (Objectives and Planning)&lt;/b&gt;: 무엇을 알고 싶은가? (얼마나 많은 직원을 더 뽑아야 하나?)&lt;/li&gt;
&lt;li data-end=&quot;711&quot; data-start=&quot;667&quot;&gt;&lt;b&gt;모델 구축 (Model Building)&lt;/b&gt;: 수학/로직 기반의 모델 작성 (예: M/M/1 큐)&lt;/li&gt;
&lt;li data-end=&quot;754&quot; data-start=&quot;712&quot;&gt;&lt;b&gt;데이터 수집 (Data Collection)&lt;/b&gt;: 어떤 데이터를, 얼마나, 어떻게 수집할 것인가&lt;/li&gt;
&lt;li data-end=&quot;791&quot; data-start=&quot;755&quot;&gt;&lt;b&gt;코딩 (Coding)&lt;/b&gt;: 적절한 언어 선택, 이벤트 처리 방식 선택&lt;/li&gt;
&lt;li data-end=&quot;833&quot; data-start=&quot;792&quot;&gt;&lt;b&gt;검증(Verification)&lt;/b&gt;: 코드가 제대로 작동하는가?&lt;/li&gt;
&lt;li data-end=&quot;876&quot; data-start=&quot;834&quot;&gt;&lt;b&gt;타당화(Validation)&lt;/b&gt;: 모델이 현실을 잘 반영하는가?&lt;/li&gt;
&lt;li data-end=&quot;911&quot; data-start=&quot;877&quot;&gt;&lt;b&gt;실험 설계 (Experimental Design)&lt;/b&gt;: 어떤 실험을 어떻게 설계할 것인가&lt;/li&gt;
&lt;li data-end=&quot;939&quot; data-start=&quot;912&quot;&gt;&lt;b&gt;시뮬레이션 실행 (Run Experiments)&lt;/b&gt;: 대량 실험 수행&lt;/li&gt;
&lt;li data-end=&quot;969&quot; data-start=&quot;940&quot;&gt;&lt;b&gt;출력 분석 (Output Analysis)&lt;/b&gt;: 통계 분석, 성능 평가&lt;/li&gt;
&lt;li data-end=&quot;1002&quot; data-start=&quot;970&quot;&gt;&lt;b&gt;보고 및 구현 (Make Reports, Implements)&lt;/b&gt;: 결과 공유, 의사 결정 지원&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;879&quot; data-end=&quot;953&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;2. 시뮬레이션 관련 용어&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1440&quot; data-start=&quot;1105&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1154&quot; data-start=&quot;1105&quot;&gt;&lt;b&gt;System&lt;/b&gt;: 현실에서 분석할 대상 (예: 병원, 공항, 서버 시스템 등)&lt;/li&gt;
&lt;li data-end=&quot;1191&quot; data-start=&quot;1155&quot;&gt;&lt;b&gt;Model&lt;/b&gt;: 시스템을 수학적&amp;middot;논리적으로 추상화한 것&lt;/li&gt;
&lt;li data-end=&quot;1241&quot; data-start=&quot;1192&quot;&gt;&lt;b&gt;System State&lt;/b&gt;: 현재 시스템의 상태를 완전히 설명해주는 변수 집합&lt;/li&gt;
&lt;li data-end=&quot;1283&quot; data-start=&quot;1242&quot;&gt;&lt;b&gt;Entities&lt;/b&gt;: 시스템을 구성하는 주체 (고객, 기계 등)&lt;/li&gt;
&lt;li data-end=&quot;1283&quot; data-start=&quot;1242&quot;&gt;&lt;b&gt;List (Queu)&lt;/b&gt;: 주체와 연관된 순서로 배열된 리스트&lt;/li&gt;
&lt;li data-end=&quot;1338&quot; data-start=&quot;1284&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Events&lt;/b&gt;&lt;/span&gt;: &lt;u&gt;시스템 상태를 변화&lt;/u&gt;시키는 순간적 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;시간&lt;/b&gt;&lt;/span&gt; (고객 도착, 서비스 완료 등)&lt;/li&gt;
&lt;li data-end=&quot;1385&quot; data-start=&quot;1339&quot;&gt;&lt;b&gt;Activities&lt;/b&gt;: 시간 동안 지속되는 동작 (예: 5분간 서비스)&lt;/li&gt;
&lt;li data-end=&quot;1440&quot; data-start=&quot;1386&quot;&gt;&lt;b&gt;Conditional Wait&lt;/b&gt;: 조건이 충족될 때까지의 대기 시간 (예: 줄 기다리기)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;953&quot; data-start=&quot;879&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;3. Time-Advance Mechanisms (시뮬레이션 시계와 시간 진행)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1537&quot; data-start=&quot;1475&quot; data-ke-size=&quot;size16&quot;&gt;시뮬레이션은 실제 시간이 아니라 &quot;모의 시간&quot;을 따라 움직임. 항상 앞으로 움직임.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1689&quot; data-start=&quot;1539&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1599&quot; data-start=&quot;1539&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;고정 간격 방식 (Fixed-Increment Time Advance)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;rarr; 매 시간단위(h)마다 상태 갱신&lt;/li&gt;
&lt;li data-end=&quot;1689&quot; data-start=&quot;1600&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;다음 이벤트 방식 (Next-Event Time Advance)★&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;rarr; 가장 가까운 이벤트 시간으로 시계 이동 (우리가 주로 사용하는 방식!)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1766&quot; data-start=&quot;1691&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc9af; color: #8a3db6;&quot;&gt;  &lt;b&gt;FEL (Future Events List)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;: 앞으로 발생할 이벤트들을 시간순으로 정렬한 목록. 시뮬레이션의 심장부.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;879&quot; data-end=&quot;953&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;3. Two Modeling Approaches&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;1834&quot; data-start=&quot;1797&quot; data-ke-size=&quot;size20&quot;&gt;① Event Scheduling (이벤트 중심 방식)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1889&quot; data-start=&quot;1835&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1866&quot; data-start=&quot;1835&quot;&gt;각 이벤트를 시간순으로 추적하며 시스템 상태 갱신&lt;/li&gt;
&lt;li data-end=&quot;1889&quot; data-start=&quot;1867&quot;&gt;직접 FEL 관리 필요 (코딩 복잡)&lt;/li&gt;
&lt;li data-end=&quot;1889&quot; data-start=&quot;1867&quot;&gt;Initialization Routine - Invoke Timing Routine - Invoke Event Routine - Go back to 1&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1932&quot; data-start=&quot;1891&quot; data-ke-size=&quot;size20&quot;&gt;② Process Interaction (프로세스 중심 방식)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2033&quot; data-start=&quot;1933&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1971&quot; data-start=&quot;1933&quot;&gt;각 &quot;엔터티(예: 고객)&quot;가 스스로 이벤트 흐름을 갖고 움직임&lt;/li&gt;
&lt;li data-end=&quot;2004&quot; data-start=&quot;1972&quot;&gt;ARENA 등 대부분의 상용 시뮬레이션 도구가 채택&lt;/li&gt;
&lt;li data-end=&quot;2033&quot; data-start=&quot;2005&quot;&gt;FEL은 자동 관리됨 &amp;rarr; &lt;b&gt;초보자에게 추천&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2033&quot; data-start=&quot;2005&quot;&gt;&lt;b&gt;Create - Process - Dispose&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DvNvA/btsOnn67ZeN/EsqR1bHjvB6F2kD8BEkox1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DvNvA/btsOnn67ZeN/EsqR1bHjvB6F2kD8BEkox1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DvNvA/btsOnn67ZeN/EsqR1bHjvB6F2kD8BEkox1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDvNvA%2FbtsOnn67ZeN%2FEsqR1bHjvB6F2kD8BEkox1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>data science</category>
      <category>simulation</category>
      <category>데이터사이언스</category>
      <category>시뮬레이션</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/16</guid>
      <comments>https://goneyak.tistory.com/16#entry16comment</comments>
      <pubDate>Fri, 20 Jun 2025 09:00:11 +0900</pubDate>
    </item>
    <item>
      <title>시뮬레이션 (Simulation) 관련 중요한 수학 개념 복습</title>
      <link>https://goneyak.tistory.com/15</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;1. Random Varibale (확률변수)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률 변수는 &lt;b&gt;확률 공간&lt;/b&gt; &lt;span&gt;&lt;span&gt;(&amp;Omega;,F,P)&lt;/span&gt;&lt;/span&gt;에서 정의된, &lt;b&gt;실수값을 갖는 함수&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rodyj/btsOk7Kv0hd/TuFG3JzJKl04uWcPmQ2PD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rodyj/btsOk7Kv0hd/TuFG3JzJKl04uWcPmQ2PD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rodyj/btsOk7Kv0hd/TuFG3JzJKl04uWcPmQ2PD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRodyj%2FbtsOk7Kv0hd%2FTuFG3JzJKl04uWcPmQ2PD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;98&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;443&quot; data-start=&quot;378&quot;&gt;확률 변수는 &amp;ldquo;무작위적인 사건의 결과를 숫자값으로 매핑(mapping)&amp;rdquo;하는 **함수(Function)**입니다.&lt;/li&gt;
&lt;li data-end=&quot;524&quot; data-start=&quot;444&quot;&gt;무작위성(randomness)은 표본공간 &lt;span&gt;&lt;span&gt;&amp;Omega;&lt;/span&gt;&lt;/span&gt;에 존재하고, 우리는 &lt;b&gt;이를 숫자로 바꾸어&lt;/b&gt; 통계적으로 다루기 쉽게 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;적용 대상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;&lt;b&gt;이산형 확률 변수 (Discrete)&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;&lt;b&gt;연속형 확률 변수 (Continuous)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;&lt;b&gt;둘다 (공통)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;수식 표현&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;&lt;span&gt;P(X=x)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;&lt;span&gt;fX(x)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;&lt;span&gt;FX(x)=P(X&amp;le;x)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;특정 값이 나올 &lt;b&gt;직접적인 확률&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;특정 값 부근에 있을 &lt;b&gt;밀도&lt;/b&gt; (확률 아님)&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;특정 값 이하가 나올 &lt;b&gt;누적 확률&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;확률 계산&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;직접 사용 가능&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;&lt;span&gt;P(a&amp;le;X&amp;le;b)=&amp;int;abfX(x)&amp;thinsp;dx&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;&lt;span&gt;FX(b)&amp;minus;FX(a)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;그래프 형태&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;막대그래프 (점만 존재)&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;곡선 (면적이 확률)&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;증가 곡선 또는 계단 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;pmf&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;pdf&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;cdf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.0465%;&quot;&gt;&lt;b&gt;최댓값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2325%;&quot;&gt;&lt;span&gt;&amp;le;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.0233%;&quot;&gt;제한 없음 (밀도이므로)&lt;/td&gt;
&lt;td style=&quot;width: 25.5814%;&quot;&gt;항상 &lt;span&gt;&amp;le;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ee2323;&quot;&gt;&lt;b&gt;2. LOTUS (Law of the Unconscious Statistician, 무의식적인 통계학자의 법칙)★&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 확률변수 RV X를 알고, X의 확률 분포 f(x)를 알 때, 확률변수 X의 변형 함수 g(x)의 분포를 몰라도 expected value 구할 때 사용&lt;/p&gt;
&lt;div id=&quot;code_1748744634371&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!-- 이산형 확률 변수의 LOTUS --&amp;gt;
&amp;lt;p&amp;gt;이산형:&amp;lt;/p&amp;gt;
$$
\mathbb{E}[g(X)] = \sum_x g(x) \cdot P(X = x)
$$

&amp;lt;!-- 연속형 확률 변수의 LOTUS --&amp;gt;
&amp;lt;p&amp;gt;연속형:&amp;lt;/p&amp;gt;
$$
\mathbb{E}[g(X)] = \int_{-\infty}^{\infty} g(x) f_X(x)\, dx
$$
&quot;&gt;&lt;!-- 이산형 확률 변수의 LOTUS --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이산형:&lt;/p&gt;
$$ \mathbb{E}[g(X)] = \sum_x g(x) \cdot P(X = x) $$ &lt;!-- 연속형 확률 변수의 LOTUS --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속형:&lt;/p&gt;
$$ \mathbb{E}[g(X)] = \int_{-\infty}^{\infty} g(x) f_X(x)\, dx $$&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;3. Moment Generating Function (mgf, 모멘트&amp;nbsp;생성&amp;nbsp;함수)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 확률 변수의 모멘트(moment)를 생성해 주는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 즉,  ( )를 t에 대해 미분하고  =0을 대입하면, &lt;b&gt;기댓값, 분산&lt;/b&gt; 등 고차 모멘트를 얻을 수 있음&lt;/p&gt;
&lt;div id=&quot;code_1748745107591&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;!-- MathJax가 활성화된 환경에서 사용하세요 --&amp;gt;

&amp;lt;p&amp;gt;
1차 미분 &amp;amp;rarr; \( \mathbb{E}[X] = M_X'(0) \)
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
2차 미분 &amp;amp;rarr; \( \mathbb{E}[X^2] = M_X''(0) \)
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
분산 공식 &amp;amp;rarr; \( \mathrm{Var}(X) = \mathbb{E}[X^2] - (\mathbb{E}[X])^2 \)
&amp;lt;/p&amp;gt;
&quot;&gt;&lt;!-- MathJax가 활성화된 환경에서 사용하세요 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 미분 &amp;rarr; \( \mathbb{E}[X] = M_X'(0) \)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2차 미분 &amp;rarr; \( \mathbb{E}[X^2] = M_X''(0) \)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 공식 &amp;rarr; \( \mathrm{Var}(X) = \mathbb{E}[X^2] - (\mathbb{E}[X])^2 \)&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;4. Jointly&amp;nbsp;Distributed&amp;nbsp;Random&amp;nbsp;Variables&amp;nbsp;(공동&amp;nbsp;분포&amp;nbsp;확률&amp;nbsp;변수)&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp; (Marginal Distribution (주변분포)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 두 개 이상의 확률 변수가 동시에 발생하며, 이들 간의 결합적인 확률 구조를 고려&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;code_1748745402652&quot; data-ke-type=&quot;html&quot; data-source=&quot;
▶ 이산형 (Discrete)

&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;1. 공동 확률 질량 함수 (Joint PMF)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
P(X = x, Y = y) = P_{X,Y}(x, y)
\]
&amp;lt;/p&amp;gt;

&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;특정한 \( x \) 와 \( y \) 가 동시에 일어날 확률을 나타냄&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;모든 가능한 조합에 대해 전체 확률의 합은 반드시 1이어야 함&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;p&amp;gt;
\[
\sum_x \sum_y P_{X,Y}(x, y) = 1
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;2. 주변 확률 질량 함수 (Marginal PMF)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
P_X(x) = \sum_y P(X = x, Y = y)
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
P_Y(y) = \sum_x P(X = x, Y = y)
\]
&amp;lt;/p&amp;gt;

&amp;lt;hr/&amp;gt;

▶ 연속형 (Continuous)

&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;1. 공동 확률 밀도 함수 (Joint PDF)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
f_{X,Y}(x, y)
\]
&amp;lt;/p&amp;gt;

&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;특정한 점 \( (x, y) \) 주변에서의 밀도를 나타냄&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;실제 확률을 구하려면 이중 적분을 수행해야 함&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;p&amp;gt;
\[
P((X, Y) \in A) = \iint_A f_{X,Y}(x, y) \, dx \, dy
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
\iint_{\mathbb{R}^2} f_{X,Y}(x, y) \, dx \, dy = 1
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;2. 주변 확률 밀도 함수 (Marginal PDF)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
f_X(x) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dy
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
f_Y(y) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dx
\]
&amp;lt;/p&amp;gt;
&quot;&gt;▶ 이산형 (Discrete)
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 공동 확률 질량 함수 (Joint PMF)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ P(X = x, Y = y) = P_{X,Y}(x, y) \]&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정한 \( x \) 와 \( y \) 가 동시에 일어날 확률을 나타냄&lt;/li&gt;
&lt;li&gt;모든 가능한 조합에 대해 전체 확률의 합은 반드시 1이어야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \sum_x \sum_y P_{X,Y}(x, y) = 1 \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 주변 확률 질량 함수 (Marginal PMF)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ P_X(x) = \sum_y P(X = x, Y = y) \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ P_Y(y) = \sum_x P(X = x, Y = y) \]&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;▶ 연속형 (Continuous)
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 공동 확률 밀도 함수 (Joint PDF)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ f_{X,Y}(x, y) \]&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정한 점 \( (x, y) \) 주변에서의 밀도를 나타냄&lt;/li&gt;
&lt;li&gt;실제 확률을 구하려면 이중 적분을 수행해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ P((X, Y) \in A) = \iint_A f_{X,Y}(x, y) \, dx \, dy \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \iint_{\mathbb{R}^2} f_{X,Y}(x, y) \, dx \, dy = 1 \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 주변 확률 밀도 함수 (Marginal PDF)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ f_X(x) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dy \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ f_Y(y) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dx \]&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;5. Conditional Expectation (조건부 기대값)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748745927757&quot; data-ke-type=&quot;html&quot; data-source=&quot;

▶ 이산형 (Discrete Case)
&amp;lt;p&amp;gt;
조건부 확률을 기반으로 \( Y \)의 평균을 계산:
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
\[
\mathbb{E}[Y \mid X = x] = \sum_y y \cdot P(Y = y \mid X = x)
\]
&amp;lt;/p&amp;gt;

▶ 연속형 (Continuous Case)
&amp;lt;p&amp;gt;
조건부 밀도 함수를 사용하여 \( Y \)의 기대값:
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
\[
\mathbb{E}[Y \mid X = x] = \int_{-\infty}^{\infty} y \cdot f_{Y \mid X}(y \mid x) \, dy
\]
&amp;lt;/p&amp;gt;

* 조건부 확률 밀도 함수의 정의
&amp;lt;p&amp;gt;
조건부 확률 밀도 함수는 다음과 같이 정의 (단, \( f_X(x) &amp;gt; 0 \)):
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
f_{Y \mid X}(y \mid x) = \frac{f_{X,Y}(x, y)}{f_X(x)}
\]
&amp;lt;/p&amp;gt;&quot;&gt;▶ 이산형 (Discrete Case)
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부 확률을 기반으로 \( Y \)의 평균을 계산:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \mathbb{E}[Y \mid X = x] = \sum_y y \cdot P(Y = y \mid X = x) \]&lt;/p&gt;
▶ 연속형 (Continuous Case)
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부 밀도 함수를 사용하여 \( Y \)의 기대값:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \mathbb{E}[Y \mid X = x] = \int_{-\infty}^{\infty} y \cdot f_{Y \mid X}(y \mid x) \, dy \]&lt;/p&gt;
* 조건부 확률 밀도 함수의 정의
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부 확률 밀도 함수는 다음과 같이 정의 (단, \( f_X(x) &amp;gt; 0 \)):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ f_{Y \mid X}(y \mid x) = \frac{f_{X,Y}(x, y)}{f_X(x)} \]&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1748746057723&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;▶ 전체 기대값의 법칙 (Law of Total Expectation)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
\[
\mathbb{E}[Y] = \mathbb{E} \left[ \mathbb{E}[Y \mid X] \right]
\]
&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;
&amp;rarr; 조건부 기대값의 평균은 전체 기대값과 같음!
&amp;lt;/p&amp;gt;
&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;▶ 전체 기대값의 법칙 (Law of Total Expectation)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \mathbb{E}[Y] = \mathbb{E} \left[ \mathbb{E}[Y \mid X] \right] \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 조건부 기대값의 평균은 전체 기대값과 같음!&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;code_1748746118277&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;▶ 전체 분산의 법칙 (Law of Total Variance)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

\[
\operatorname{Var}(Y) = \mathbb{E}[\operatorname{Var}(Y \mid X)] + \operatorname{Var}(\mathbb{E}[Y \mid X])
\]
&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;▶ 전체 분산의 법칙 (Law of Total Variance)&lt;/b&gt;&lt;/p&gt;
\[ \operatorname{Var}(Y) = \mathbb{E}[\operatorname{Var}(Y \mid X)] + \operatorname{Var}(\mathbb{E}[Y \mid X]) \]&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;6. Covariance&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div id=&quot;code_1748746201624&quot; data-ke-type=&quot;html&quot; data-source=&quot;
&amp;lt;p&amp;gt;
\[
\operatorname{Cov}(X, Y) = \mathbb{E}[(X - \mathbb{E}[X]) (Y - \mathbb{E}[Y])] = \mathbb{E}[XY] - \mathbb{E}[X] \cdot \mathbb{E}[Y]
\]
&amp;lt;/p&amp;gt;

\[
\operatorname{Cov}(X, Y) &amp;gt; 0 \quad \text{: 두 변수는 같은 방향으로 움직임 (양의 상관)}
\]
\[
\operatorname{Cov}(X, Y) &amp;lt; 0 \quad \text{: 두 변수는 반대 방향으로 움직임 (음의 상관)}
\]
&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \operatorname{Cov}(X, Y) = \mathbb{E}[(X - \mathbb{E}[X]) (Y - \mathbb{E}[Y])] = \mathbb{E}[XY] - \mathbb{E}[X] \cdot \mathbb{E}[Y] \]&lt;/p&gt;
\[ \operatorname{Cov}(X, Y) &amp;gt; 0 \quad \text{: 두 변수는 같은 방향으로 움직임 (양의 상관)} \] \[ \operatorname{Cov}(X, Y) &amp;lt; 0 \quad \text{: 두 변수는 반대 방향으로 움직임 (음의 상관)} \]&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;7. Correlation&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div id=&quot;code_1748746287496&quot; data-ke-type=&quot;html&quot; data-source=&quot;
&amp;lt;p&amp;gt;
\[
\rho_{X,Y} = \frac{\operatorname{Cov}(X, Y)}{\sqrt{\operatorname{Var}(X)} \cdot \sqrt{\operatorname{Var}(Y)}}
\]



&amp;lt;p&amp;gt;
&amp;rarr; 공분산을 두 변수의 표준편차로 나눈 정규화 지표, 값은 항상 \(-1 \leq \rho \leq 1\)
&amp;lt;/p&amp;gt;

\[
\rho = 1 \quad \text{: 완벽한 양의 상관}
\]
\[
\rho = -1 \quad \text{: 완벽한 음의 상관}
\]
\[
\rho = 0 \quad \text{: 선형 상관 없음 (비선형 관계는 있을 수 있음)}
\]
&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\[ \rho_{X,Y} = \frac{\operatorname{Cov}(X, Y)}{\sqrt{\operatorname{Var}(X)} \cdot \sqrt{\operatorname{Var}(Y)}} \]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 공분산을 두 변수의 표준편차로 나눈 정규화 지표, 값은 항상 \(-1 \leq \rho \leq 1\)&lt;/p&gt;
\[ \rho = 1 \quad \text{: 완벽한 양의 상관} \] \[ \rho = -1 \quad \text{: 완벽한 음의 상관} \] \[ \rho = 0 \quad \text{: 선형 상관 없음 (비선형 관계는 있을 수 있음)} \]&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ee2323;&quot;&gt;&lt;b&gt;8. Central Limit Theorem (CLT, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;중심극한정리&lt;/b&gt;&lt;/span&gt;)★&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;- 데이터의 원래 분포가 어떤 모양이든 관계없이, 표본 평균은 충분히 큰 표본 수(n)에 대해 정규분포에 수렴&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 확률 변수 &lt;span&gt;&lt;span&gt;X1,X2,&amp;hellip;,XnX1, X2,,,,, X_n&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;이:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;500&quot; data-start=&quot;431&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;440&quot; data-start=&quot;431&quot;&gt;서로 독립이고&lt;/li&gt;
&lt;li data-end=&quot;463&quot; data-start=&quot;441&quot;&gt;동일한 분포를 따르며 (i.i.d.)&lt;/li&gt;
&lt;li data-end=&quot;500&quot; data-start=&quot;464&quot;&gt;평균 &lt;span&gt;&lt;span&gt;&amp;mu;&lt;/span&gt;&lt;/span&gt;, 분산 &lt;span&gt;&lt;span&gt;&amp;sigma;2&lt;/span&gt;&lt;/span&gt;을 가질 때,&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;code_1748746850158&quot; data-ke-type=&quot;html&quot; data-source=&quot;\[
\bar{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i
\]
&quot;&gt;\[ \bar{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i \]&lt;/div&gt;
&lt;div id=&quot;code_1748746672376&quot; data-ke-type=&quot;html&quot; data-source=&quot;\[
\frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1)
\]
&quot;&gt;\[ \frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1) \]&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;span&gt;&lt;span&gt;n&amp;rarr;&amp;infin;&lt;/span&gt;&lt;/span&gt;일 때, 표준 정규분포 &lt;span&gt;&lt;span&gt;N(0,1)&lt;/span&gt;&lt;/span&gt;에 수렴&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czWptx/btsOmsz0wpl/lTp45sV4idvDqVZWE2lDhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czWptx/btsOmsz0wpl/lTp45sV4idvDqVZWE2lDhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czWptx/btsOmsz0wpl/lTp45sV4idvDqVZWE2lDhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczWptx%2FbtsOmsz0wpl%2FlTp45sV4idvDqVZWE2lDhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/Simulation (시뮬레이션)</category>
      <category>data science</category>
      <category>Lotus</category>
      <category>simulation</category>
      <category>기대값</category>
      <category>데이터사이언스</category>
      <category>시뮬레이션</category>
      <category>조건부기대값</category>
      <category>중심극한정리</category>
      <category>확률과통계</category>
      <category>확률변수</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/15</guid>
      <comments>https://goneyak.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 17 Jun 2025 09:00:42 +0900</pubDate>
    </item>
    <item>
      <title>시뮬레이션 (Simulation) 개요 #3 Analyzing Randomness in Simulations</title>
      <link>https://goneyak.tistory.com/14</link>
      <description>&lt;h3 data-end=&quot;98&quot; data-start=&quot;63&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;1. 시뮬레이션 결과에서의 랜덤성 분석&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;380&quot; data-start=&quot;99&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;155&quot; data-start=&quot;99&quot;&gt;시뮬레이션 결과는 &lt;b&gt;복잡한 랜덤성&lt;/b&gt;과 &lt;b&gt;비정상성&lt;/b&gt; 때문에 전통적인 통계 분석이 어려움.&lt;/li&gt;
&lt;li data-end=&quot;380&quot; data-start=&quot;156&quot;&gt;시뮬레이션 데이터는 보통:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;380&quot; data-start=&quot;177&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;246&quot; data-start=&quot;177&quot;&gt;&lt;b&gt;Not Normally Distributed&lt;/b&gt;: 대기 시간이나 처리 시간 같은 데이터는 정규분포를 따르지 않음.&lt;/li&gt;
&lt;li data-end=&quot;316&quot; data-start=&quot;249&quot;&gt;&lt;b&gt;Not Identically Distributed (Non-i.i.d)&lt;/b&gt;: 하루 시간대에 따라 패턴이 다름.&lt;/li&gt;
&lt;li data-end=&quot;380&quot; data-start=&quot;319&quot;&gt;&lt;b&gt;Not Independent&lt;/b&gt;: 한 고객의 대기 시간이 길면 뒤따르는 고객의 대기 시간도 길어짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;418&quot; data-start=&quot;387&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;418&quot; data-start=&quot;387&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;2. 시뮬레이션의 두 가지 유형&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1077&quot; data-start=&quot;419&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style5&quot;&gt;
&lt;tbody data-end=&quot;1077&quot; data-start=&quot;789&quot;&gt;
&lt;tr data-end=&quot;936&quot; data-start=&quot;789&quot;&gt;
&lt;td style=&quot;width: 24.4186%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;819&quot; data-start=&quot;789&quot;&gt;&lt;b&gt;Terminating Simulations&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9768%;&quot; data-end=&quot;892&quot; data-start=&quot;819&quot; data-col-size=&quot;md&quot;&gt;특정 이벤트나 시간에 종료되며 &lt;b&gt;단기적인 행동 분석&lt;/b&gt;에 집중함.&lt;/td&gt;
&lt;td style=&quot;width: 28.4884%;&quot; data-end=&quot;936&quot; data-start=&quot;892&quot; data-col-size=&quot;sm&quot;&gt;하루 동안의 은행 고객 평균 대기 시간, 마케팅 캠페인의 단기 효과 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1077&quot; data-start=&quot;937&quot;&gt;
&lt;td style=&quot;width: 24.4186%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;968&quot; data-start=&quot;937&quot;&gt;&lt;b&gt;Steady-State Simulations&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9768%;&quot; data-col-size=&quot;md&quot; data-end=&quot;1029&quot; data-start=&quot;968&quot;&gt;무한정 실행되며 &lt;b&gt;장기적인 안정화 상태 분석&lt;/b&gt;에 집중함. 초기 바이어스 제거 후 안정적 데이터 수집.&lt;/td&gt;
&lt;td style=&quot;width: 28.4884%;&quot; data-end=&quot;1077&quot; data-start=&quot;1029&quot; data-col-size=&quot;sm&quot;&gt;생산 공장의 조립 라인, 교통 네트워크의 장기적 성능 평가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1154&quot; data-start=&quot;1084&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1154&quot; data-start=&quot;1084&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;3. Terminating Simulations 분석 - Independent Replications&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1196&quot; data-start=&quot;1155&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1196&quot; data-start=&quot;1155&quot;&gt;독립적인 여러 시뮬레이션 실행을 통해 통계적 분석을 수행하는 방법.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1579&quot; data-start=&quot;1215&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1297&quot; data-start=&quot;1215&quot;&gt;&lt;b&gt;독립적인 복제 실행&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1297&quot; data-start=&quot;1238&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1266&quot; data-start=&quot;1238&quot;&gt;동일한 조건에서 여러 번 시뮬레이션을 실행.&lt;/li&gt;
&lt;li data-end=&quot;1297&quot; data-start=&quot;1270&quot;&gt;복제마다 서로 간섭 없이 독립적이어야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1362&quot; data-start=&quot;1299&quot;&gt;&lt;b&gt;각 복제에서 표본 평균 계산&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1362&quot; data-start=&quot;1327&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1362&quot; data-start=&quot;1327&quot;&gt;예를 들어, 각 실행마다 &lt;b&gt;평균 대기 시간&lt;/b&gt;을 계산.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1511&quot; data-start=&quot;1364&quot;&gt;&lt;b&gt;i.i.d. Normal Distribution 가정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1511&quot; data-start=&quot;1406&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1461&quot; data-start=&quot;1406&quot;&gt;중심 극한 정리에 의해 충분히 많은 복제가 있을 경우, &lt;b&gt;표본 평균&lt;/b&gt;은 정규분포에 근사.&lt;/li&gt;
&lt;li data-end=&quot;1511&quot; data-start=&quot;1465&quot;&gt;이는 원시 데이터가 정규분포를 따르지 않아도 표본 평균은 정규분포에 근접함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1579&quot; data-start=&quot;1513&quot;&gt;&lt;b&gt;전통적인 통계 기법 적용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1579&quot; data-start=&quot;1539&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1579&quot; data-start=&quot;1539&quot;&gt;표본 평균에 대해 &lt;b&gt;신뢰 구간 계산, 가설 검정&lt;/b&gt; 등을 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-end=&quot;1654&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1654&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;4. Steady-State Simulations 분석 - Method of Batch Means&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1711&quot; data-start=&quot;1655&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1711&quot; data-start=&quot;1655&quot;&gt;무한정 실행되는 시뮬레이션에서 &lt;u&gt;**안정화된 상태(steady-state)**&lt;/u&gt;를 분석하는 기법.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2287&quot; data-start=&quot;1730&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1801&quot; data-start=&quot;1730&quot;&gt;&lt;b&gt;하나의 긴 시뮬레이션 실행&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1801&quot; data-start=&quot;1757&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1801&quot; data-start=&quot;1757&quot;&gt;여러 번 반복하지 않고, 한 번의 긴 실행을 통해 충분한 데이터를 확보.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1931&quot; data-start=&quot;1803&quot;&gt;&lt;b&gt;Warm-up 기간 설정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1931&quot; data-start=&quot;1829&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1887&quot; data-start=&quot;1829&quot;&gt;초기 상태의 바이어스(Initialization Bias)를 제거하기 위해 초기 데이터를 제외함.&lt;/li&gt;
&lt;li data-end=&quot;1931&quot; data-start=&quot;1891&quot;&gt;예를 들어, 첫 1000개의 데이터는 무시하고 그 이후부터 수집.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2063&quot; data-start=&quot;1933&quot;&gt;&lt;b&gt;남은 데이터의 Batch 처리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2063&quot; data-start=&quot;1962&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2005&quot; data-start=&quot;1962&quot;&gt;warm-up 이후의 데이터를 &lt;b&gt;동일한 크기의 Batch&lt;/b&gt;로 나눔.&lt;/li&gt;
&lt;li data-end=&quot;2063&quot; data-start=&quot;2009&quot;&gt;예를 들어, 9000개의 데이터를 10개의 Batch로 나누면 각 Batch는 900개씩.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2133&quot; data-start=&quot;2065&quot;&gt;&lt;b&gt;각 Batch의 표본 평균 계산&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2133&quot; data-start=&quot;2095&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2133&quot; data-start=&quot;2095&quot;&gt;각 Batch의 평균을 구하여 성능 측정을 위한 지표로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2221&quot; data-start=&quot;2135&quot;&gt;&lt;b&gt;i.i.d. Normal Distribution 가정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2221&quot; data-start=&quot;2177&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2221&quot; data-start=&quot;2177&quot;&gt;충분히 많은 Batch가 있다면, Batch의 평균도 정규분포에 근접함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2287&quot; data-start=&quot;2223&quot;&gt;&lt;b&gt;전통적인 통계 기법 적용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2287&quot; data-start=&quot;2249&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2287&quot; data-start=&quot;2249&quot;&gt;신뢰 구간, 가설 검정 등을 Batch 평균에 적용하여 분석.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-end=&quot;2341&quot; data-start=&quot;2294&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;2341&quot; data-start=&quot;2294&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;5. Terminating vs Steady-State 비교&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;3244&quot; data-start=&quot;2342&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;3244&quot; data-start=&quot;2627&quot;&gt;
&lt;tr data-end=&quot;2754&quot; data-start=&quot;2627&quot;&gt;
&lt;td style=&quot;width: 18.8372%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2648&quot; data-start=&quot;2627&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.814%;&quot; data-end=&quot;2698&quot; data-start=&quot;2648&quot; data-col-size=&quot;sm&quot;&gt;단기적인 이벤트 분석&lt;/td&gt;
&lt;td style=&quot;width: 40.3488%;&quot; data-end=&quot;2754&quot; data-start=&quot;2698&quot; data-col-size=&quot;sm&quot;&gt;장기적인 안정화 상태 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2875&quot; data-start=&quot;2755&quot;&gt;
&lt;td style=&quot;width: 18.8372%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2775&quot; data-start=&quot;2755&quot;&gt;&lt;b&gt;실행 시간&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.814%;&quot; data-end=&quot;2822&quot; data-start=&quot;2775&quot; data-col-size=&quot;sm&quot;&gt;제한된 시간 또는 특정 이벤트에 종료&lt;/td&gt;
&lt;td style=&quot;width: 40.3488%;&quot; data-end=&quot;2875&quot; data-start=&quot;2822&quot; data-col-size=&quot;sm&quot;&gt;무한정 실행되거나 충분히 긴 시간 동안 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2997&quot; data-start=&quot;2876&quot;&gt;
&lt;td style=&quot;width: 18.8372%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2895&quot; data-start=&quot;2876&quot;&gt;&lt;b&gt;Warm-up 필요성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.814%;&quot; data-end=&quot;2944&quot; data-start=&quot;2895&quot; data-col-size=&quot;sm&quot;&gt;없음 (즉시 데이터 수집)&lt;/td&gt;
&lt;td style=&quot;width: 40.3488%;&quot; data-end=&quot;2997&quot; data-start=&quot;2944&quot; data-col-size=&quot;sm&quot;&gt;필요함 (초기 바이어스 제거 후 수집)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3135&quot; data-start=&quot;2998&quot;&gt;
&lt;td style=&quot;width: 18.8372%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3018&quot; data-start=&quot;2998&quot;&gt;&lt;b&gt;분석 방법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.814%;&quot; data-end=&quot;3073&quot; data-start=&quot;3018&quot; data-col-size=&quot;sm&quot;&gt;Independent Replications&lt;/td&gt;
&lt;td style=&quot;width: 40.3488%;&quot; data-end=&quot;3135&quot; data-start=&quot;3073&quot; data-col-size=&quot;sm&quot;&gt;Method of Batch Means&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3244&quot; data-start=&quot;3136&quot;&gt;
&lt;td style=&quot;width: 18.8372%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3157&quot; data-start=&quot;3136&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.814%;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3196&quot; data-start=&quot;3157&quot;&gt;하루 동안의 병원 환자 대기 시간, &lt;br /&gt;이벤트 기간 동안의 매출 분석&lt;/td&gt;
&lt;td style=&quot;width: 40.3488%;&quot; data-end=&quot;3244&quot; data-start=&quot;3196&quot; data-col-size=&quot;sm&quot;&gt;공장 조립 라인의 안정화 상태, &lt;br /&gt;통신 네트워크의 장기 성능 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;4451&quot; data-start=&quot;4426&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;6.&amp;nbsp;주요 분석 지표&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;4911&quot; data-start=&quot;4452&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;4911&quot; data-start=&quot;4596&quot;&gt;
&lt;tr data-end=&quot;4674&quot; data-start=&quot;4596&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4629&quot; data-start=&quot;4596&quot;&gt;&lt;b&gt;Confidence Interval (신뢰구간)&lt;/b&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4674&quot; data-start=&quot;4629&quot;&gt;시뮬레이션 결과의 신뢰 수준을 나타내는 구간.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4751&quot; data-start=&quot;4675&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4707&quot; data-start=&quot;4675&quot;&gt;&lt;b&gt;Hypothesis Testing (가설검정)&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;4751&quot; data-start=&quot;4707&quot; data-col-size=&quot;sm&quot;&gt;시뮬레이션 결과가 특정 가설을 만족하는지 평가.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4831&quot; data-start=&quot;4752&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4783&quot; data-start=&quot;4752&quot;&gt;&lt;b&gt;Standard Error (표준 오차)&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;4831&quot; data-start=&quot;4783&quot; data-col-size=&quot;sm&quot;&gt;시뮬레이션 평균의 오차 수준 측정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4911&quot; data-start=&quot;4832&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4865&quot; data-start=&quot;4832&quot;&gt;&lt;b&gt;Batch Mean Analysis&lt;/b&gt;&lt;/td&gt;
&lt;td data-end=&quot;4911&quot; data-start=&quot;4865&quot; data-col-size=&quot;sm&quot;&gt;Batch별 평균 분석을 통한 안정화 상태 추정.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD62NS/btsOlXUFa1F/dFFpsXJdyn3SL1JS6k0Zv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD62NS/btsOlXUFa1F/dFFpsXJdyn3SL1JS6k0Zv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD62NS/btsOlXUFa1F/dFFpsXJdyn3SL1JS6k0Zv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD62NS%2FbtsOlXUFa1F%2FdFFpsXJdyn3SL1JS6k0Zv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/Simulation (시뮬레이션)</category>
      <category>analyzing randomness</category>
      <category>data science</category>
      <category>simulation</category>
      <category>simulation output analysis</category>
      <category>데이터사이언스</category>
      <category>랜덤성분석</category>
      <category>시뮬레이션</category>
      <author>곤약처럼 부드럽게, 쫀쫀하게</author>
      <guid isPermaLink="true">https://goneyak.tistory.com/14</guid>
      <comments>https://goneyak.tistory.com/14#entry14comment</comments>
      <pubDate>Sat, 14 Jun 2025 09:00:54 +0900</pubDate>
    </item>
  </channel>
</rss>