페이지

2025년 7월 18일 금요일

차등 정보보호 - 개념

차등 정보보호 - 개념

재식별 위험

가장 확실한 정보보호는 정보를 아예 공개하지 않는 것입니다. 그렇게 되면 그 정보의 활용 가치 또한 없는 셈입니다. 정보의 활용을 통해 가치를 조금이라도 만들어 보고자 한다면 정보의 공개는 피할 수 없습니다.

정보를 공개하면 재식별의 위험이 발생합니다. 식별자를 제거하더라도 마찬가지입니다. 이것은 근원적인 문제이며 위험의 정도가 달라질 뿐입니다.

예를 들어, 어떤 지역에 거주하는 사람들 전체를 대상으로 질의 방식을 채택하여 특정 질병 보유 현황을 조사하는 상황을 상상해 봅시다. 조사 기관은 결과를 취합하여 1%에 해당하는 사람들이 해당 질병을 보유하고 있다고 발표하였습니다. 1년 후 동일한 조사를 실시하고 얻은 결과는 1.09%였습니다. 그런데 1년 동안의 전출입 자료에 접근할 수 있는 담당자가 있다면 그는 지난해 총 거주자 수가 1,000 명이었는데 전출자는 없고 전입자만 10명이었다는 사실을 토대로 새로 전입한 열 명 중 한 명이 해당 질병 보유자일 가능성이 높다고 추정할 수 있습니다. 여기서 추정이라고 표현한 이유는 조사 대상자 중 일부가 거짓으로 답변했을 수도 있기 때문입니다.

계산 과정:

  • 1,000 명의 1%: 10명
  • 1,010 명의 1.09%: 11명
  • 전출자는 없으므로 새로 전입한 열 명 중 한 명이 질병 보유자

새로 전입한 열 명 중에 정말로 질병 보유자가 한 명이 포함되어 있다면 그는 10%의 확률로 식별될 가능성이 있으므로 이러한 상황을 알아채는 순간부터 상당한 불안을 느낄 수 있습니다.

위험의 정량화

정보를 공개하는 개인이 재식별 위험으로 인해 느끼는 불안의 정도를 어떻게 정량적으로 다룰 수 있을까요?

조사 대상군에 추가되는 한 개인의 입장에서 생각해 봅시다. 자신의 정보가 추가됨으로 인해 전체 결과에 큰 차이가 난다면 식별 가능성이 높은 것이고 그렇지 않다면 식별 가능성이 낮은 것입니다. 이로부터 개인의 정보가 추가되기 전과 후의 전체 결과의 차이가 개인의 식별 위험의 정도와 관련이 있음을 알 수 있습니다.

  • 입력1 -> 처리 알고리즘 -> 출력1
  • 입력2 -> 처리 알고리즘 -> 출력2

여기서,

  • 입력1: N 명 정보의 데이터베이스
  • 입력2: 입력1에 한 명의 정보를 추가한 데이터베이스

위에서 한 명의 정보가 추가됨으로써 발생하는 출력의 차이를 줄일 수 있다면 재식별의 위험을 낮출 수 있습니다. 이를 위해 처리 알고리즘이 제공해야 할 기능은 다음과 같습니다.

  • 결과의 차이를 미리 설정한 수준 이하로 유지

이제 결과의 차이를 어떻게 정의하느냐의 문제가 남았습니다.

다시 한 개인의 입장으로 이 문제를 바라봅시다. 예, 아니오와 같은 단답형 질의에 응답할 때 진짜 값을 입력이라고 하면 어떤 확률을 적용하여 진실을 말하거나 거짓을 말하는 것입니다. 진실을 말하는 확률이 1.0에 가까울수록 한 개인의 데이터 차이가 결과 차이로 이어질 가능성이 높고 진실을 말하는 확률이 0.5에 가까울수록 개인의 데이터 차이가 결과 차이로 이어질 가능성이 낮습니다. 확률을 도입하는 것이므로 개별 사건의 결과보다는 기댓값에 초점을 맞추어 살펴보는 것이 이해에 도움됩니다.

이로부터 응답이 참으로 나온 경우 입력이 참인 경우로부터 나왔을 수도 있고 입력이 거짓인 경우로부터 나왔을 수도 있습니다. 만약에 두 가지 가능성의 비율이 크다면, 즉,

P(Response=YesTruth=Yes)P(Response=YesTruth=No) \frac{P\left(Response=Yes\mid Truth=Yes\right)}{P\left(Response=Yes\mid Truth=No\right)}

의 값이 크다면 더 높은 확률로 대상자의 응답이 참일 가능성이 높은 것이 됩니다. 반면에 두 확률의 비율이 1에 가깝다면 대상자의 응답이 참일 가능성, 거짓일 가능성이 비슷해집니다. 전자의 경우에는 재식별 위험이 높아지고, 후자의 경우에는 재식별 가능성이 낮아지는 상황입니다.

이러한 논의로부터 재식별 위험의 정도를 어떻게 정량화할 것인지에 대한 단서를 찾을 수 있습니다.

Written with StackEdit.

차등 정보보호 - 정의

차등 정보보호 - 정의

유래

차등 정보보호(Differential Privacy)에서 'differential’이라는 단어는 '차이(difference)'를 의미하며, 데이터베이스에 특정 개인의 데이터가 포함되거나 포함되지 않았을 때 발생하는 '결과의 차이를 제어’하는 기술의 핵심 개념을 직접적으로 나타냅니다.

이 용어는 2006년 컴퓨터 과학자 신시아 드워크(Cynthia Dwork)가 발표한 논문 "Differential Privacy"에서 처음으로 공식화되었습니다. 이 개념의 핵심은 데이터베이스에 대한 질의(query) 결과가 특정 개인의 데이터 유무에 따라 크게 달라지지 않도록 보장하는 것입니다. 즉, 데이터베이스에서 한 사람의 정보를 추가하거나 제거하더라도 분석 결과에 미치는 영향(차이)이 거의 없도록 만드는 것이 목표입니다.

정의

Pr[A(D1S]eϵPr[A(D2)S]+δ Pr[A(D_1 \in S] \le e^{\epsilon} Pr[A(D_2) \in S] + \delta

여기서,

  • ϵ\epsilon: 양의 실수
  • AA: 임의적 응답 특성을 가지고 있는 알고리즘
  • D1,D2D_1, D_2: 한 사람의 데이터만 다른 두 개의 모든 데이터셋들
  • SS: A의 출력 범위에 속하는 모든 부분 집합들

이 정의를 근사 차등 정보보호(approximate differential privacy)라고 부르며 δ=0인 경우는 순수 차등 정보보호(pure differential privacy)라고 부릅니다.

차등 정보보호 기법으로 처리된 데이터셋을 Differentially Private Data라고 합니다.

개인정보보호에 대한 하나의 수학적 정의인 차등정보보호는 다음과 같은 특징을 가지고 있습니다.

  • 개인정보보호 손실에 대한 정량화
  • 수학적 증명이 가능한 개인정보보호 수준의 보장

기법

노이즈 추가

특정 집단에 속하는 구성원들의 월 수입액 평균값을 질의했다고 합시다. 특정 개인의 수입액이 너무나 커서 평균값에 미치는 영향이 매우 크다면 다음과 같은 방법으로 가장 큰 수입액이 얼마인지 알아낼 수 있습니다.

  1. 모든 구성원들의 월 수입액 평균값 질의하여 결과 얻기 => income_avg
  2. 한 사람을 뺀 나머지 구성원들의 월 수입액 평균값 질의 반복 => income_avg_1, …, k, …, N
  3. (income_avg_k - income_avg) 값이 가장 큰 경우의 income_avg_k 값이 특정 개인의 수입액

누가 가장 큰 수입을 올리고 있는지 이미 알려져 있다면 위의 결과를 통해 그의 월 수입이 얼마인지 알게 됩니다.

이러한 상황을 방지하기 위한 하나의 방편은 질의 결과를 출력할 때마다 일정 범위 내에서 노이즈를 임의로 추가하여 출력값이 실제 수입액의 차이에서 발생하는 것인지, 아니면 단지 노이즈에 의한 것인지 알 수 없게 만드는 것입니다.

노이즈 추가 기법은 개인의 민감한 정보가 데이터 분석 결과에 미치는 영향을 제한하면서도, 전체적인 데이터의 통계적 유용성은 보존하는 것을 목표로 합니다.

무작위 응답 (Randomized Response)

환자 질병 유무 데이터를 공개할 때 데이터셋에 불확실성을 추가함으로써 개별 환자의 질병 유무를 확정할 수 없도록 만들 수 있습니다.

예를 들어 어떤 병원이 데이터 분석을 목적으로 10,000명 규모의 환자 데이터셋을 만들고 그 중에서 무작위로 약 1,000명을 선택하여 그들의 질병 유무를 반대로 바꾼다고 생각해 봅시다. 이렇게 만들어진 데이터셋과 무작위 선택 방법을 공개하지만 누구의 질병 유무를 바꾸었는지는 공개하지 않습니다. 따라서 공개된 데이터셋을 보게 되더라도 특정 환자의 질병 유무를 100% 수준으로는 확신할 수 없게 됩니다.

Written with StackEdit.

2025년 7월 15일 화요일

Intel MKL 예제를 Microsoft Visual C++로 빌드하기

Intel MKL 예제를 Microsoft Visual C++로 빌드하기

인텔 프로세서 시스템에서 아래의 영역에 해당하는 수학 계산을 빠르게 수행하고자 한다면 Intel MKL 라이브러리를 사용할 수 있습니다.

  • Linear Algebra
  • Fast Fourier Transforms (FFT)
  • Vector Statistics & Data Fitting
  • Vector Math & Miscellaneous Solvers

이 문서는 Intel MKL이 제공하는 예제 파일을 Microsoft Visual C++ 로 컴파일하고 링크하여 실행 파일을 만드는 과정을 소개합니다.

빌드 환경

다음은 이 문서를 작성하는 과정에서 Intel MKL 예제를 빌드하기 위하여 사용한 환경입니다.

시스템

  • 운영체제: Windows 10 (64비트)
  • 프로세서: Intel Core i7

설치 제품

환경 변수

  1. 명령 프롬프트 창을 엽니다.

  2. 아래 스크립트를 실행하여 환경 변수INCLUDE, LIB, 그리고 PATH를 설정합니다.

    @echo off
    
    set CPRO_PATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows
    set MKLROOT=%CPRO_PATH%\mkl
    set REDIST=%CPRO_PATH%\redist
    
    set INCLUDE=%MKLROOT%\include;%INCLUDE%
    
    set LIB=%MKLROOT%\lib\intel64;%LIB%
    set PATH=%REDIST%\intel64\mkl;%PATH%
    
    REM for OpenMP intel thread
    set LIB=%CPRO_PATH%\compiler\lib\intel64;%LIB%
    set PATH=%REDIST%\intel64\compiler;%PATH%
    
    REM for TBB thread
    set LIB=%CPRO_PATH%\tbb\lib\intel64\vc_mt;%LIB%
    set PATH=%REDIST%\intel64\tbb\vc_mt;%PATH%
    
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
    
  3. 아래 스크립트를 실행하여 Visual C++ 사용 환경을 만듭니다. 64-bit로 빌드하기 위하여 vcvarsall.bat의 인자로 amd64를 지정합니다. 인자를 지정하지 않으면 32-bit로 빌드할 것입니다.

    @echo off
    
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
    

예제-1. ex_nslqp_c

  1. 아래 위치에 있는 예제 압축 파일을 작업하고자 하는 폴더 <working folder>에 풉니다.

    C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\mkl\examples\examples_core_c.zip
    
  2. 명령 프롬프트 창에서 아래의 폴더로 이동합니다.

    <working folder>\solverc
    
  3. 아래 스크립트를 실행하여 ex_nlsqp_c 예제를 빌드합니다.

    @echo off
    
    nmake dllintel64 threading=parallel compiler=msvs function="ex_nlsqp_c"
    nmake libintel64 threading=parallel compiler=msvs function="ex_nlsqp_c"
    nmake dllintel64 threading=sequential compiler=msvs function="ex_nlsqp_c"
    nmake libintel64 threading=sequential compiler=msvs function="ex_nlsqp_c"
    
  4. 아래 폴더에서 빌드 결과로 ex_nlsqp_c.exe 파일이 생성되었는지 확인합니다.

    _results\msvs_lp64_parallel_intel64
    _results\msvs_lp64_parallel_intel64_dll
    _results\msvs_lp64_sequential_intel64
    _results\msvs_lp64_sequential_intel64_dll
    
  5. ex_nlsqp_c.exe 파일을 실행하면 아래와 같은 메시지가 표시됩니다.

    >_results\msvs_lp64_sequential_intel64_dll\ex_nlsqp_c.exe
    |         dtrnlsp Powell............PASS
    

예제-2. matrix_multiplication

  1. 아래 사이트를 방문하여 예제 압축 파일을 다운로드하고 작업하고자 하는 폴더 <working folder>에 풉니다.

  1. 명령 프롬프트 창에서 아래의 폴더로 이동합니다.

    <working folder>\mkl\mkl_c_samples\matrix_multiplication\src
    

FOR 루프 계산

  1. 아래 스크립트를 실행하여 matrix_multiplication 예제를 빌드합니다.

    @echo off
    
    set THREADING=sequential
    set DLL_SUFF=
    set EXAMPLE=matrix_multiplication
    set OMP_LIB=
    cl.exe /c %EXAMPLE%.c
    link.exe mkl_intel_lp64%DLL_SUFF%.lib mkl_core%DLL_SUFF%.lib mkl_%THREADING%%DLL_SUFF%.lib %OMP_LIB% %EXAMPLE%.obj
    
  2. 현재 폴더에 matrix_multiplication.exe 파일이 생성되었는지 확인합니다.

  3. matrix_multiplication.exe 파일을 실행하면 아래와 같은 메시지가 표시됩니다.

    >matrix_multiplication.exe
     
     This example measures performance of rcomputing the real matrix product
     C=alpha*A*B+beta*C using a triple nested loop, where A, B, and C are
     matrices and alpha and beta are double precision scalars
    
     Initializing data for matrix multiplication C=A*B for matrix
     A(2000x200) and matrix B(200x1000)
    
     Allocating memory for matrices aligned on 64-byte boundary for better
     performance
    
     Intializing matrix data
    
     Making the first run of matrix product using triple nested loop
     to get stable run time measurements
    
     Measuring performance of matrix product using triple nested loop
    
     == Matrix multiplication using triple nested loop completed ==
     == at 1219.72656 milliseconds ==
    
     Deallocating memory
    
     Example completed.
    

    계산 소요 시간:

    • 1219.72656 milliseconds

CBLAS API + 멀티쓰레드 계산

  1. 아래 스크립트를 실행하여 dgemm_threading_effect_example 예제를 빌드합니다.

    @echo off
    
    set THREADING=intel_thread
    set DLL_SUFF=
    set EXAMPLE=dgemm_threading_effect_example
    set OMP_LIB=libiomp5md.lib
    cl.exe /c %EXAMPLE%.c
    link.exe mkl_intel_lp64%DLL_SUFF%.lib mkl_core%DLL_SUFF%.lib mkl_%THREADING%%DLL_SUFF%.lib %OMP_LIB% %EXAMPLE%.obj
    
  2. 현재 폴더에 dgemm_threading_effect_example.exe 파일이 생성되었는지 확인합니다.

  3. dgemm_threading_effect_example.exe 파일을 실행하면 아래와 같은 메시지가 표시됩니다.

    >dgemm_threading_effect_example.exe
    
     This example demonstrates threading impact on computing real matrix product
     C=alpha*A*B+beta*C using Intel(R) MKL function dgemm, where A, B, and C are
     matrices and alpha and beta are double precision scalars
    
     Initializing data for matrix multiplication C=A*B for matrix
     A(2000x200) and matrix B(200x1000)
    
     Allocating memory for matrices aligned on 64-byte boundary for better
     performance
    
     Intializing matrix data
    
     Finding max number of threads Intel(R) MKL can use for parallel runs
    
     Running Intel(R) MKL from 1 to 4 threads
    
     Requesting Intel(R) MKL to use 1 thread(s)
    
     Making the first run of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface to get stable run time measurements
    
     Measuring performance of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface on 1 thread(s)
    
     == Matrix multiplication using Intel(R) MKL dgemm completed ==
     == at 17.27277 milliseconds using 1 thread(s) ==
    
     Requesting Intel(R) MKL to use 2 thread(s)
    
     Making the first run of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface to get stable run time measurements
    
     Measuring performance of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface on 2 thread(s)
    
     == Matrix multiplication using Intel(R) MKL dgemm completed ==
     == at 9.67240 milliseconds using 2 thread(s) ==
    
     Requesting Intel(R) MKL to use 3 thread(s)
    
     Making the first run of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface to get stable run time measurements
    
     Measuring performance of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface on 3 thread(s)
    
     == Matrix multiplication using Intel(R) MKL dgemm completed ==
     == at 8.70466 milliseconds using 3 thread(s) ==
    
     Requesting Intel(R) MKL to use 4 thread(s)
    
     Making the first run of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface to get stable run time measurements
    
     Measuring performance of matrix product using Intel(R) MKL dgemm function
     via CBLAS interface on 4 thread(s)
    
     == Matrix multiplication using Intel(R) MKL dgemm completed ==
     == at 7.69962 milliseconds using 4 thread(s) ==
    
     Deallocating memory
    
     It is highly recommended to define LOOP_COUNT for this example on your
     computer as 130 to have total execution time about 1 second for reliability
     of measurements
    
     Example completed.
    

    계산 소요 시간:

    • 17.3 milliseconds using 1 thread(s)
    • 9.7 milliseconds using 2 thread(s)
    • 8.7 milliseconds using 3 thread(s)
    • 7.7 milliseconds using 4 thread(s)

정리

계산 소요 시간 비교

행렬곱을 계산하기 위하여 Intel MKL이 제공하는 CBLAS API와 멀티쓰레드를 사용하면 FOR 루프를 사용할 때에 비하여 소요 시간이 1/158 수준으로 단축됨을 알 수 있었습니다.

  • FOR 루프 계산: 1219.7 milliseconds
  • CBLAS API + 멀티쓰레드 계산: 7.7 milliseconds using 4 thread(s)

스크립트 및 소스 파일

본문에서 소개한 환경 설정 스크립트, 빌드 스크립트, 그리고 행결곱 계산 소스 파일을 GitHub에 올려 놓았습니다.

참고 문서

  1. Developer Guide for Intel® Math Kernel Library for Windows
  2. Using Intel® Math Kernel Library for Matrix Multiplication - C
  3. Intel® Math Kernel Library Link Line Advisor
  4. Compiling and Linking Intel® Math Kernel Library with Microsoft* Visual C++*

Written with StackEdit.

2025년 7월 13일 일요일

1차원 데이터로 흠집 탐지할 때 일반 오토인코더와 LSTM-오토인코더 중 어느 것을 사용할까?

평평한 표면의 흠집을 1차원 데이터로 탐지할 경우, 대부분의 상황에서는 일반 오토인코더(Autoencoder)가 더 적합하고 효율적입니다.

왜 일반 오토인코더가 더 적합한가?

흠집이나 긁힘은 1차원 데이터 상에서 순간적으로 급격하게 튀는 '점 이상(Point Anomaly)'의 형태로 나타날 가능성이 큽니다. 평평한 표면의 정상 데이터는 거의 일정한 값을 유지하다가, 흠집 구간에서만 값이 크게 벗어납니다.

  • 패턴보다 분포 학습이 중요: 일반 오토인코더는 정상 데이터의 통계적 분포(예: '모든 값은 거의 0에 가깝다')를 학습하는 데 뛰어납니다. 따라서 이 분포에서 크게 벗어나는 흠집 신호를 매우 효과적으로 잡아낼 수 있습니다.
  • 단순성과 효율성: 모델 구조가 단순하여 LSTM-오토인코더보다 학습 속도가 훨씬 빠르고 계산 비용이 적게 듭니다. 이 문제에 굳이 복잡한 모델을 사용할 필요가 없습니다.

LSTM-오토인코더는 어떤 경우에 더 나은가?

만약 표면이 단순히 평평한 것이 아니라, 일정한 '결'이나 반복적인 '패턴'을 가지고 있다면 LSTM-오토인코더가 더 나은 선택이 될 수 있습니다.

  • 예시: 헤어라인 마감 처리된 금속 표면, 규칙적인 무늬가 있는 직물 등
  • 패턴의 이상 탐지: 이런 경우 흠집은 단순히 값이 튀는 것을 넘어, 정상적인 패턴의 흐름(Sequence)을 깨뜨리는 이상 현상으로 나타납니다. LSTM-오토인코더는 이러한 시간적, 순서적 패턴을 학습할 수 있으므로, 패턴이 망가진 지점을 더 정교하게 탐지할 수 있습니다.

2025년 7월 6일 일요일

차등 정보보호 - 예시

차등 정보보호 - 예시

다섯 명의 환자 질병 유무 데이터에 불확실성을 추가하여 공개하고 이로부터 원래의 질병 보유 환자 비율이 어떤 값일지 추정하는 과정을 보여 줍니다.

불확실성 추가 방식 정하기

전체 영역 중에서 밝은 부분의 면적이 차지하는 비율이 90%인 스피너를 사용하여 원본 데이터에 불확실성을 추가합니다.

  • plight=0.9p_{light} = 0.9

시행 결과로 바늘이 밝은 부분에서 멈추면 질병 유무를 그대로 유지하고 어두운 부분에서 멈추면 질병 유무를 뒤집어서 기록합니다.

원본 데이터 준비하기

위의 데이터는 원본이기 때문에 환자 D의 False가 진짜 False일 가능성은 100%입니다.

불확실성 추가하기

환자별로 스피너를 시행하고 그 결과에 따라 질병 유무를 그대로 유지하거나 반대로 바꿉니다.

데이터 공개하기

스피너를 시행하여 처리한 결과 데이터를 공개합니다.

불확실성의 추가로 인해 환자 D의 True가 진짜 True일 가능성은 100%가 아니고 90%가 됩니다. 이것은 다른 환자들의 질병 유무에 대해서도 마찬가지입니다.

질병 보유 비율 추정

공개된 데이터로부터 원본 데이터의 질병 보유 비율을 추정합니다.

통계 자료

원본 데이터에서 질병 유무가 True인 환자의 비율:

  • noriginal=0.6n_{original} = 0.6

공개 데이터에서 질병 유무가 True인 환자의 비율:

  • npublic=0.8n_{public} = 0.8

수식 유도

공개 데이터로부터 추정하는 원본 데이터에서 질병 유무가 True인 환자의 비율:

  • nestimated=?n_{estimated} = ?

공개 데이터에서 질병 유무가 True인 환자는 진짜 True인 환자가 True로 대답했거나 진짜 False인 환자가 True로 대답한 경우에 해당합니다. 따라서 다음의 관계가 성립합니다.

  • npublic=nestimated×plight+(1nestimated)×(1plight)n_{public} = n_{estimated} \times p_{light} + (1 - n_{estimated}) \times (1 - p_{light})

위의 관계를 사용하여 질병 유무가 진짜 True인 환자의 비율을 추정할 수 있습니다.

  • nestimated=npublic(1plight)2×plight1=0.8(10.9)2×0.91=0.70.8=0.875n_{estimated} = \frac {n_{public} - (1 - p_{light})}{2 \times p_{light} - 1} = \frac {0.8 - (1 - 0.9)}{2 \times 0.9 - 1} = \frac {0.7}{0.8} = 0.875

오차율

진짜 True 환자 비율과 추정 True 환자 비율의 차이:

  • error=nestimatednoriginal=0.8750.6=0.275{error} = n_{estimated} - n_{original} = 0.875 - 0.6 = 0.275

참고 자료

Written with StackEdit.

차등 정보보호 - 유형

 

데이터 처리 방식에 따른 분류

데이터에 직접 적용되어 프라이버시를 보장하는 핵심 알고리즘들입니다.

노이즈 추가

차등 정보보호에서 가장 보편적으로 사용되는 기법입니다. 핵심 원리는 데이터베이스에 대한 통계적 질의(Query)의 결과값에 수학적으로 생성된 '노이즈(noise)'라고 불리는 무작위 숫자를 더하여, 개별 데이터의 기여도를 모호하게 만드는 것입니다.

작동 원리

  1. 쿼리 실행: 데이터 분석가가 데이터베이스에 쿼리(예: "30대 사용자들의 평균 소득은 얼마인가?")를 실행하면, 시스템은 먼저 실제 결과값을 계산합니다.
  2. 민감도(Sensitivity) 계산: 쿼리 결과가 데이터베이스 내의 단 한 사람의 데이터 변화에 의해 얼마나 크게 변할 수 있는지를 측정합니다. 예를 들어, 한 사람의 데이터를 추가하거나 제거했을 때 평균 소득의 최댓값 변화가 '민감도'가 됩니다. 민감도가 높을수록 더 많은 노이즈가 필요합니다.
  3. 노이즈 생성 및 추가: 계산된 민감도와 목표 프라이버시 수준(엡실론, ε)에 따라 노이즈의 크기가 결정됩니다. 이 노이즈를 실제 쿼리 결과에 더하여 최종 결과를 만듭니다.

대표적인 노이즈 메커니즘

  • 라플라스 메커니즘 (Laplace Mechanism): 평균, 합계, 개수 등 수치형 결과를 반환하는 쿼리에 주로 사용됩니다. 민감도에 비례하는 라플라스 분포에서 추출된 노이즈를 추가합니다.
  • 가우시안 메커니즘 (Gaussian Mechanism): 라플라스 메커니즘과 유사하지만, 정규분포(가우시안 분포)에서 노이즈를 추출합니다. 여러 쿼리를 조합하거나 머신러닝 모델의 학습 파라미터를 보호하는 등 더 복잡한 분석에 적합합니다.

결론적으로, 노이즈 추가 기법은 분석 결과에 약간의 불확실성을 주입하여 "이 결과가 특정 개인의 정보 때문에 이렇게 나온 것"이라고 확신할 수 없게 만듦으로써 개인의 프라이버시를 보호합니다.

무작위 응답

주로 설문조사와 같이 사용자로부터 직접 데이터를 수집하는 단계에서 적용되는 기법입니다. 응답자가 자신의 민감한 정보(예: 위법 행위 경험, 특정 정치 성향 등)를 직접적으로 노출하지 않고도 통계적으로 유의미한 데이터를 제공할 수 있게 합니다.

작동 원리

이해를 돕기 위해 "불법 다운로드 경험이 있습니까?"라는 민감한 질문을 예로 들어보겠습니다.

  1. 무작위 규칙 설정: 응답자에게 다음과 같은 규칙을 제시합니다.
    • "먼저, 동전을 던지세요."
    • "앞면이 나오면, 진실을 답해주세요."
    • "뒷면이 나오면, 다시 동전을 던져서 앞면이 나오면 '예', 뒷면이 나오면 '아니요'라고 무작위로 답해주세요."
  2. 응답자 답변: 응답자는 이 규칙에 따라 답변합니다. 질문자는 응답자가 어떤 규칙에 따라 답변했는지(진실을 말했는지, 무작위로 답했는지) 알 수 없습니다. 따라서 "예"라는 답변이 실제 경험 때문인지, 아니면 동전 던지기 결과 때문인지 구분할 수 없습니다.
  3. 통계적 보정: 데이터 수집가는 이렇게 수집된 수많은 응답을 바탕으로 통계적 보정을 통해 실제 "예"의 비율을 추정할 수 있습니다. 예를 들어, 전체 응답 중 70%가 "예"라고 나왔다면, 무작위 응답으로 인해 "예"가 나올 확률(이 경우 25%)을 제외하여 실제 불법 다운로드 경험자의 비율을 수학적으로 계산해낼 수 있습니다.

이 기법은 각 응답의 신뢰도를 희생하는 대신, 응답자에게 그럴듯한 부인 가능성(Plausible Deniability)을 제공하여 더 솔직한 답변을 유도하고, 전체 데이터셋의 통계적 정확성을 확보하는 데 목적이 있습니다. 지역형 차등 정보보호(Local DP)의 근간이 되는 중요한 기술입니다.

구현 모델에 따른 분류

중앙형 차등 정보보호 (Central DP):

  • 개념: 신뢰할 수 있는 중앙 데이터 관리자(서버)가 원본 데이터를 모두 수집합니다.
  • 처리: 관리자는 수집된 전체 데이터에 대해 쿼리를 실행하고, 그 결과값에 노이즈를 추가하여 외부에 공개합니다.
  • 장점: 데이터 전체의 통계적 특성을 파악한 후 최소한의 노이즈를 추가하므로 데이터의 정확성과 유용성이 높습니다.
  • 단점: 모든 원본 데이터가 중앙 서버에 집중되므로, 서버 관리자에 대한 높은 신뢰가 필요하며 서버가 해킹당할 경우 개인정보 유출 위험이 있습니다.

지역형 차등 정보보호 (Local DP):

  • 개념: 중앙 관리자를 신뢰하지 않는 모델입니다. 각 사용자의 기기(로컬)에서 데이터가 중앙 서버로 전송되기 전에 프라이버시 처리가 이루어집니다.
  • 처리: 각 사용자가 자신의 데이터에 직접 노이즈를 추가한 후, 처리된 데이터를 서버로 전송합니다. 서버는 노이즈가 포함된 데이터들을 수집하여 통계를 분석합니다.
  • 장점: 원본 데이터가 기기를 떠나지 않으므로 강력한 프라이버시를 보장합니다. 중앙 서버 관리자를 신뢰할 필요가 없습니다.
  • 단점: 각 데이터에 개별적으로 노이즈가 추가되므로 전체적으로 노이즈의 양이 많아져 데이터의 정확성과 유용성이 중앙형 모델에 비해 낮아질 수 있습니다.



2025년 7월 4일 금요일

분산 환경에서 데이터 파이프라인과 워크플로우를 구성하고 관리할 수 있는 오픈소스 도구들

 

주요 오픈소스 도구들에 대한 기본 정보를 정리하여 비교할 수 있도록 하였습니다.

Apache Airflow

가장 널리 알려지고 강력한 생태계를 자랑하는 워크플로우 관리 도구입니다.

  • 핵심 철학:
    • Code-First
  • 주요 특징:

    • Python 코드 기반: 모든 워크플로우(DAG)를 Python 코드로 정의하여 버전 관리, 테스트, 동적 파이프라인 생성이 매우 유연합니다.
    • 강력한 생태계: 거의 모든 데이터 시스템과 클라우드 서비스에 연결할 수 있는 방대한 플러그인(Provider)을 제공합니다.
  • 추천 대상:

    • Python에 익숙한 개발자 중심 팀

제품 링크: https://airflow.apache.org/

DolphinScheduler

직관적인 UI를 통해 코딩 없이 워크플로우를 설계하고 관리하는 데 중점을 둔 도구입니다.

  • 핵심 철학:
    • UI-First
  • 주요 특징:

    • 시각적 UI: 웹 UI에서 드래그 앤 드롭(Drag & Drop) 방식으로 워크플로우를 시각적으로 설계합니다.
    • 높은 안정성: 분산형 다중 마스터/워커 구조로 설계되어 특정 노드에 장애가 발생해도 중단 없이 작업을 처리할 수 있습니다.
    • 낮은 진입 장벽: 개발자가 아니더라도 데이터 분석가나 운영자가 쉽게 사용할 수 있습니다.
  • 추천 대상:

    • 다양한 역할의 사용자가 협업하는 팀

제품 링크: https://dolphinscheduler.apache.org/en-us

Prefect

현대적인 데이터 스택을 위해 설계된 유연하고 동적인 워크플로우 자동화 도구입니다.

  • 핵심 철학:
    • Dynamic & Hybrid
  • 주요 특징:

    • 동적 워크플로우: 실행 시점에 파이프라인의 구조가 변경되는 동적인 워크플로우에 강점을 보입니다.
    • 하이브리드 실행 모델: 오케스트레이션은 Prefect Cloud에서 처리하고, 실제 데이터 처리는 사용자의 안전한 인프라 내에서 실행하여 보안을 강화할 수 있습니다.
  • 추천 대상:

    • 예측 불가능한 최신 데이터 파이프라인

제품 링크: https://www.prefect.io/

Dagster

데이터 파이프라인의 개발, 테스트, 운영 전반을 지원하는 데이터 오케스트레이터입니다.

  • 핵심 철학:
    • Asset-based
  • 주요 특징:

    • 데이터 자산 중심: 코드뿐만 아니라 파이프라인이 생성하는 데이터 자산(테이블, 파일, 모델 등)을 중심으로 워크플로우를 관리합니다.
    • 강력한 개발/테스트 지원: 로컬 개발과 테스트를 강력하게 지원하여 개발 단계에서 파이프라인의 안정성을 높일 수 있습니다.
  • 추천 대상:

    • 데이터 품질과 개발 생산성을 중시하는 팀

제품 링크: https://dagster.io/

Argo Workflows

쿠버네티스(Kubernetes) 환경에 특화된 컨테이너 네이티브 워크플로우 엔진입니다.

  • 핵심 철학:
    • K8s-Native
  • 주요 특징:

    • 쿠버네티스 네이티브: 모든 워크플로우가 쿠버네티스의 CRD(Custom Resource Definition)로 정의되어 쿠버네티스 생태계와 완벽하게 통합됩니다.
    • 대규모 병렬 처리: 수천 개의 컨테이너(Pod)를 동시에 실행하며 대규모 병렬 작업을 효율적으로 처리합니다.
  • 추천 대상:

    • 인프라가 쿠버네티스 중심인 환경

제품 링크: https://argoproj.github.io/workflows/



차등 정보보호 - 개념

차등 정보보호 - 개념 재식별 위험 가장 확실한 정보보호는 정보를 아예 공개하지 않는 것입니다. 그렇게 되면 그 정보의 활용 가치 또한 없는 셈입니다. 정보의 활용을 통해 가치를 조금이라도 만들어 보고자 한다면 ...