cs

Intro.

가끔 분노가 차오르고 답답할때가 있다.

회사에서 답답하고 안풀리면, 혼자 멍하니 잠시 창문에 기대서 밖을 본다..

담배를 피고싶기도하고, 또 걍 바로 관둘까 이런저런 생각 많이하는데

뭐.. 그냥 쉽게 행동하구 그러면 안되자나... 참아야지..

맛난거 먹구, 사람들 만나서 기분풀구, 맥주한잔하면 뭐 또 잠시 회복되니까

좀 더 버티쟈.. 버텨 버티자고..

아 이 식빵 무지 달다 팬케이크 아니야? / 욕하는거아님


갑자기 랜덤 샘플링 가지고 와서 이상하겠지만, 뭐 그런 상황이 생겼따.ㅋ

랜덤 샘플링과 랜덤 알고리즘이 뭔지 아주 간략하게 맛만 보자고... 

 

데이터 분석이나 머신러닝에서 랜덤(Random)이라는 개념은 매우 중요하지만,

 

랜덤 샘플링(Random Sampling)과 랜덤 알고리즘(Random Algorithm)은 다릅니다. 다르다. 다르다고. 달라. 아 식빵 무지달다.


랜덤 샘플링과 랜덤 알고리즘의 차이

TYPE DESCRIPTION EXAMPLE
랜덤 알고리즘 (Random Algorithm) 난수를 생성하는 알고리즘으로, 컴퓨터가 예측 불가능한 값을 만들도록 설계됨 random.randint(), numpy.random.choice(), secrets.token_hex()
랜덤 샘플링 (Random Samplin 데이터에서 특정 방식으로 랜덤하게 샘플을 추출하는 기법 단순 랜덤 샘플링, 층화 샘플링, 가중 샘플링

 

쉽게 말해서

랜덤 알고리즘은 난수를 생성하는 과정이고, 랜덤 샘플링은 난수를 활용하여 데이터를 샘플링하는 기법이다.

 

그럼 하나씩 간략하게 집어보쟈.


랜덤 샘플링(Random Sampling) 방식

랜덤 샘플링은 데이터를 무작위로 선택하는 다양한 기법을 포함하며, 사용 목적에 따라 적절한 방법을 선택할 수 있다.. 음 아는거 대충 정리해보면. 

1. 단순 랜덤 샘플링 (Simple Random Sampling, SRS)

https://tgmresearch.com/simple-random-sampling.html

개념: 모든 데이터를 동등한 확률로 N개 선택하는 방식

  • 장점: 구현이 쉽고, 모든 데이터가 같은 확률로 선택됨
  • 단점: 데이터가 불균형한 경우 특정 그룹이 과소/과대 대표될 수 있음
  • 활용 예시:
    • 대규모 데이터셋에서 랜덤하게 샘플링하여 분석할 때
    • 특정 패턴 없이 임의의 샘플을 선택하는 연구에서 사용

전체 모집단에서 모든 개체가 동일한 확률로 선택되기 때문에, 모집단의 특정 그룹이 많다면 샘플에서도 그 비율이 유지될 가능성이 높음.

결론: 단순 랜덤 샘플링은 모집단 비율을 따르지만, 희귀한 그룹이 샘플에서 적절하게 포함되지 않을 수 있다는 한계가 있음.

 

 

2. 층화 랜덤 샘플링 (Stratified Sampling)

https://tgmresearch.com/stratified-sampling.html

개념: 데이터를 특정 그룹(예: 등급별)로 나눈 후, 각 그룹에서 같은 개수 혹은 비율을 랜덤하게 추출

  • 장점:그룹의 비율을 유지하며 균형 잡힌 샘플링 가능
  • 단점: 그룹(등급)의 분포를 사전에 알고 있어야 함
  • 활용 예시:
    • 고객 데이터를 분석할 때 연령별, 지역별 균형을 맞춰 샘플링할 때
    • 의료 연구에서 특정 질병을 가진 환자와 그렇지 않은 사람을 비교할 때

 

특정 그룹별로 샘플 수를 조절할 수 있어 과소/과대 대표 문제를 해결 가능

그러나 층화 기준을 잘못 정하면 오히려 모집단의 실제 비율을 반영하지 못할 수도 있음.

 

결론: 층화 샘플링을 사용하면 특정 그룹의 과소/과대 대표 문제를 해결할 수 있지만, 층화 기준을 신중하게 설정해야 함.

 

 

3. 가중 랜덤 샘플링 (Weighted Sampling)

https://www.aarondefazio.com/tangentially/?p=58 / 이해가 쏙쏙

개념: 특정 그룹의 확률을 높이거나 낮춰서 샘플을 추출

  • 장점: 희귀한 데이터를 더 많이 포함시킬 수 있다
  • 단점: 적절한 가중치를 설정하는 것이 중요함
  • 활용 예시:
    • 극히 적은 빈도의 이벤트(예: 사기 거래 탐지)를 샘플링할 때
    • 상품 추천 시스템에서 인기 상품보다 신규 상품을 더 많이 노출하고 싶을 때

특정 그룹의 샘플이 적으면 가중치를 조절하여 많이 뽑히게 할 수 있음.
하지만 가중치를 잘못 설정하면 모집단 비율을 왜곡할 가능성이 있음.

 

결론: 특정 그룹을 더 많이 포함하려면 가중 샘플링을 활용할 수 있지만, 가중치 설정이 중요하다


랜덤 알고리즘(Random Algorithm) 종류와 특징

반면에 랜덤 알고리즘 같은경우, 랜덤으로 뭔가를 고른다 이런게 아닌

난수를 생성하는 기법을 기반으로 활용하는 것이다.

 

1. 의사난수 생성기 (Pseudo Random Number Generator, PRNG)

https://livebook.manning.com/concept/cryptography/pseudo-random-number-generator

PRNG(Pseudo Random Number Generator)는 의사난수 생성기를 의미한다.

즉...음..  난수를 생성하는 알고리즘이지만, 실제로는 완전한 랜덤이 아닌, 특정 시드(seed) 값에서 유도되는 결정론적(random-like) 난수를 생성하는 방식이라고 알면 된다. 어렵다 어려워. 

 

근데 컴퓨터는 완전한 랜덤을 생성할 수 없다고 하기 때문에 이런 경우, 수학적 알고리즘을 기반으로 난수를 생성하게끔 만들어주는거다.

 

근데 왜 ? 우리 컴퓨타선생깨서는 완전하게 랜덤을 생성할 수 없느냐?

컴퓨터는 기본적으로 결정론적(deterministic) 시스템이기 때문에, 입력값(시드 값)이 같으면 항상 동일한 출력을 만들어내는 특성이 있기 때문엥..

 

따라서 완전히 예측 불가능한 난수를 만들기 위해서는 외부 환경에서 온도, 전압 변동, 사용자 입력 등 예측 불가능한 요소를 활용해야하지만, 일반적인 소프트웨어에서 이러한 요소를 직접 활용하는 것은 어렵기 때문에, 수학적 알고리즘을 이용하여 난수를 생성하는 PRNG가 널리 사용 되는거라고 보면 된댜.

 

 대표적인 PRNG 알고리즘:

  • LCG(Linear Congruential Generator): 가장 오래된 난수 생성 방식으로, 간단하지만 보안성이 낮음가장 오래된 난수 생성 방식
  • MT(Mersenne Twister): 파이썬 random 모듈에서 사용되는 기본 알고리즘으로 속도가 빠름
  • PCG (Permuted Congruential Generator):  MT보다 빠르고 보안성이 높으며, 최근 연구에서 많이 사용됨

활용 예시:

  • 게임에서 랜덤한 아이템 드롭 시스템 구현
  • 통계 및 시뮬레이션 모델에서 무작위 값을 생성할 때

 

2. 암호학적 난수 생성기 (CSPRNG, Cryptographically Secure PRNG)

요즘 뜨는 분야? 이기도 한데 보안이 필요한 경우, 예측 불가능한 난수를 생성하는 알고리즘을 활용한다. 

https://pytorch.org/blog/torchcsprng-release-blog/

 

대표적인 CSPRNG 알고리즘:

  • Blum Blum Shub (BBS): 보안성이 높지만 속도가 느림
  • Fortuna: 다양한 소스에서 엔트로피를 모아 안전한 난수를 생성

활용 예시:

  • 암호 키 생성
  • 블록체인 시스템에서 보안성을 유지하기 위한 난수 생성

 

 

3. 난수 기반 알고리즘 (Randomized Algorithm)

난수를 이용해 문제를 해결하는 알고리즘으로, 몬테카를로 방법과 라스베가스 알고리즘이 대표적이라고 한다. 

https://amaankhatib232.medium.com/randomized-algorithms-4e4a7f9b1f93

 

대표적인 알고리즘:

  • 몬테카를로 방법 (Monte Carlo Method): 확률적 시뮬레이션을 통해 근사적인 해를 구하는 방식
  • 라스베가스 알고리즘 (Las Vegas Algorithm): 무작위성을 사용하지만 항상 정확한 결과를 반환

활용 예시:

  • 금융 시장에서 리스크 분석을 수행할 때
  • 로봇이 최적의 경로를 찾을 때 확률적인 접근법 사용

결론 및 요약: 어떤 방식을 사용할까?

종류 목표 추천 방법
랜덤 샘플링 모든 등급에서 같은 개수(N개)를 랜덤 추출하고 싶음 층화 샘플링 (Stratified Sampling) 
랜덤 샘플링 특정 등급을 더 많이 포함하고 싶음 가중 랜덤 샘플링 (Weighted Sampling) 
랜덤 샘플링 정말 무작위로 랜덤하게 N개 선택 단순 랜덤 샘플링 (Simple Random Sampling) 
랜덤 알고리즘 예측 불가능한 난수를 생성하여 보안성을 강화하고 싶음 암호학적 난수 생성기 (CSPRNG) 
랜덤 알고리즘 빠르고 효율적인 난수 생성이 필요함 의사난수 생성기 (PRNG, Mersenne Twister 등) 
랜덤 알고리즘 확률적 시뮬레이션을 통해 최적해를 구하고 싶음 몬테카를로 방법 (Monte Carlo Method) 

 

그냥 ... 알고리즘과 샘플링이 다르다는걸 알게하고싶었따.. ㅎ


 

참고 링크:

https://gazelle-and-cs.tistory.com/75

 

랜덤 알고리즘과 알고리즘의 확률적 분석 (Randomized Algorithms & Probabilistic Analysis of Algorithms)

요새 알고리즘에 어떻게 확률론이 사용되는지를 공부하고 있습니다. 그러면서 예전에는 잘 몰랐거나 어렴풋이만 알던 내용들을 정확히 바로 잡고 있는데요. 그중에서도 가장 기본적인 내용을

gazelle-and-cs.tistory.com

https://amaankhatib232.medium.com/randomized-algorithms-4e4a7f9b1f93

 

Randomized Algorithms

“Random numbers should not be generated with a method chosen at random” — Donald Knuth

amaankhatib232.medium.com

https://double-d.tistory.com/25

 

데이터 샘플링: 통계적 및 비통계적 샘플링 방법

데이터 샘플링(표본추출)은 많은 양의 데이터를 대상으로 분석 작업 수행 시, 전체 데이터가 아닌 일부를 ‘샘플(표본)’로 선택하여 전체 데이터를 대표하게 하는 작업이다. 이 샘플링은 처리

double-d.tistory.com

https://pytorch.org/blog/torchcsprng-release-blog/

 

PyTorch framework for cryptographically secure random number generation, torchcsprng, now available

One of the key components of modern cryptography is the pseudorandom number generator. Katz and Lindell stated, “The use of badly designed or inappropriate random number generators can often leave a good cryptosystem vulnerable to attack. Particular care

pytorch.org

https://livebook.manning.com/concept/cryptography/pseudo-random-number-generator

 

liveBook · Manning

 

livebook.manning.com

 

 

+ Recent posts