AI/Data #2026-01-15 ⋯ 생물정보분석 #4 확률밀도, t-검정이산과 연속변수 이산과 연속변수 - 암 유전체 데이터에서 1개 위치에 나타는 돌연변이 횟수 같은 정수 데이터 -> 이산(discrete) 변수 - 실수 값 데이터 -> 연속(continuous) 변수 - 확률적으로 이 데이터를 처리하기 위해서는 정규분포를 써야한다. 확률밀도 연속확률분포 - 연속확률변수를 표현하기 위해서는 '범위'를 사용해야한다. - 170cm인 사람은 실제로는 169.5~170.5cm 이므로 - 키를 재보니 170인 사람이 3%였다는 것은 - P(키=170)=3% 라고 쓸수없고 - P(169.5<키<170.5)=3% 와 같이 써야한다. - 연속확률분포로 가장 유명한 것은 정규분포이고 - 파라미터는 평균과 표준편차. 확률밀도함수 - 연속확률분포는 확률을 누적값으로 나타낸다 - 키가 170cm일 확률은 극한으로 작지만 - 170미만일 확률은 40%와 같이 계산 가능하다. - 연속확률변수 X에 대해서 누적분포함수(CDF)는 F(x)로 표현한다. - 키가 정확히 170일 확률이나 150일 확률이나 모두 극한으로 작지만 - 170 주변일 확률과 150 주변일 확률은 비교 가능하고 - 이는 밀도로 표현할수있다. - CDF를 미분하면 밀도함수 PDF(probability density function)가 된다 이해안되는부분 - 확률밀도함수 PDF는 확률누적분포함수 CDF를 미분한것인데 확률은 0,1사이이다. 그래서 확률밀도의 크기는 PDF의 x축의 단위(여기서는 키, cm)에 의해 바뀌게 된다. PDF의 y축 즉 확률밀도값이 0.01 0.02 0.03 0.04라고 하면 정확한 의미는 0.01(cm-1)이다. 그래서 키의 단위로 feet를 쓰는 미국에서는 확률밀도값이 달라진다. 아무튼 PDF 그래프를 모든 x범위에 대해 적분하면 1이 된다는 점은 항상 만족한다. t-검정 t-값 - 분포가 그룹 간 얼마나 다른가? - 사실 odd ratio로도 알수있는데 - 암세포에서 평균 100이 발현되는데 보통세포에서는 50이 발현되니까 2배 더 발현된다 이런식으로. - t-검정을 쓰면 좀더 통계적으로 엄밀히 판단 가능. 시나리오 - 유전자 A에 대해서 암세포와 보통세포에서 측정한 결과가 이렇다고할때 - 암세포: N1=100개에서 g의 발현이 평균 x1=100, 표준편차 s1=20 - 보통 세포: N2=300개에서 g의 발현이 평균 x2-80, 표준편차 s2=30 - 유전자 A의 분포는 암세포와 보통세포에서 정량적으로 얼마나 다를까? t-값 계산 - 일단 0-가설을 정해야한다 - 유전자 A의 발현은 암세포와 보통세포에서 같은 분포를 갖는다. -> 분석케이스가 분포가 같다 아니다. - student t-값은 암세포 보통세포의 표준편차가 같다고 가정하고 - (0-가설상에서는 평균의 차이가 0이어야하지만) 평균의 차이가 20인 현재 관측이 우연일 확률을 구한다 출처 책 빅데이터&인공지능 with 생물정보학#생물정보분석2026-01-13 ⋯ 생물정보분석 #3 확률분포, 카이제곱검정통계적 유의성 통계적 유의성 - 실험 결과로 나온 수치가 우연인지, 주장을 뒷받침할만큼 확률(빈도)이 높은 것인지 그 의미를 검증할수만 있으면 된다. - 어떤 실험 결과가 통계적으로 유의하다는 말은 - 그 결과가 우연히 일어난 것이 아니라는 것 - 통계 분석을 통해 - 어떤 암에서 특정 유전자가 빈번하게 발현되는것을 발견했다고 할때 이것이 우연히 관측된 결과인지 중복된 관찰을 통해 큰 의미가 있는 것으로 결론지을수 있는 것인지 정량적으로 밝힐 수 있다. p-value - 관측이 진리가 아닌 우연일 확률 - 0-가설로 다음을 설정: 동전은 앞면이 나올 확률이 1/2이다. - 그리고 실험: 10번 던지기를 1000번 해보니 60번은 앞면이 8번이상 나왔다. - 실험 결과: 1앞면이 나올 확률이 1/2이라도 10번 던지면 6%의 확률로 8번이상 앞면이 나온다. - p=0.06이다. - p값이 0.05보다 작으면 0-가설을 기각하는데 0.06이니까 0-가설을 기각 불가다. 즉 0.06정도면 확률이 높으니 8번이상 앞면이 나온 관측은 진리가 아닌 우연이다. 귀무가설 - 귀무가설은 처음부터 기각을 염두에 둔 가설. - 앞의 예에서는 - 동전 앞면과 뒷면이 나올 확률이 1/2이라고 가정하고 8번이 나올 확률을 계산했다. - 귀무가설을 어떻게 정하는지에 따라 p-값이 바뀐다 그래서 p-값을 보면 항상 귀무가설이 뭔지 확인해야 한다. 이항분포 - 10번 던지기 1000번 할 필요 없이(즉 실험할 필요 없이), - 확률분포를 알고있는 경우에는 CDF를 이용해서 p-값을 구할 수 있다. - 확률분포를 알고있다란? - 확률분포 유형이랑 그 유형이 필요로 하는 값을 알고있다. 즉 binom이라는거랑 n은 10이고 p는 0.5라는걸 알고있다. 시뮬레이션 - 확률분포를 알기위해서는 - 현상을 분석해서 확률모델로 만들어야함. - 평균을 가진다고 가정해도되면 정규분포가 되고 - 유전체 빈도처럼 나타나는 횟수에 관련되어있으면 포아송 확률분포 모델을 쓴다. - 명확한 모델이 나오지 않으면 시뮬레이션을 쓴다. - 연구 방법론으로 50개 유전자를 찾았을때 30개가 특정 질병에 관련돼있으면 - 얼마나 의미있는 결과인지 보기 위해서는 - 전체 유전자에서 임의로 30개를 뽑는게 아니고 - 전체 유전자에서 임의로 50개를 뽑고 특정 질병과 관련된 유전자가 30개 이상인 경우인지 보기 <<를 1000번 정도 하고 몇번인지 세보면 된다. - 여기서 귀무가설은 "관측은 우연이 아니라 진리다" (관측=이 연구 방법론으로 찾은 50개 중 30개가 특정 질병에 관련됨) - p-값이 크면 기각이다. 관측은 우연이다. - 시뮬레이션 방법의 단점은 - p-값이 매우 작기 때문에 많은 실험을 반복해야한다. - 1000번만 실험하면 0.001 이하의 p-값은 모두 0으로 표시된다. (그래서 p<0.001이라는 표현이 있다 = 0을 저렇게 쓴다는건가?) - 그리고 연산량이 많다. - 50개 정도를 돌리는건 괜찮지만 암 유전체에서 발견되는 100만개 유전변이를 각각 시뮬레이션하는것은 불가능하다. 확률 변수와 분포 확률 변수 X - 값은 모르는데 나올 확률은 x로 정해져있는 변수 X 이항 분포 - p의 확률로 성공하는 일을 n번 시행해서 성공할 확률 x에 대한 분포. - X~B(10, 0.5) - 앞면이 나올 횟수 X가 얼마인진 모르겠지만 n=10, p=0.5인 B(이항분포)를 따른다. - 어떤 유전 변이가 2% 확률로 나타나는데 어떤 질병을 가진사람 1000명을 봤을때 그중 40명이 이 유전변이를 가졌다. 이 유전변이가 질병과 관련 없는데 우연히 일어났을 확률 x의 분포는? - 0-가설: 유전변이 v는 질병과 상관이없다 - p-값: P(X>=40) - X~B(1000,0.2) - 계산해서 p-값이 충분히 작다면 0-가설을 기각하고 유전변이 v가 질병과 상관있다는걸 알수있다. - 빈도를 확률로 나타낸다. 푸아송 분포 - 빈도를 확률로 나타내는 또다른 방법. - 유전체 시퀀싱할때 모든 위치가 평균 10번 시퀀싱되도록 하는데 - 어떤 부분이 얼마나 시퀀싱 될지 깊이(depth)가 확률 변수 X라고 하면 - 이 변수는 평균을 10으로 하는 푸아송 분포를 따른다. - 푸아송 분포는 이항분포로 바꿀수도있는데 - 인간 유전체는 30억쌍이고 깊이 10이면 총 300억개 시퀀싱 데이터가 있고 - 데이터가 특정 1개 위치에 대한 데이터일 확률은 1/30억으로써 - B(300억, 1/30억)으로 표현되는데 - n이 너무 크고 p가 너무 작다. 이럴때 푸아송으로 근사된다고 볼수있다. 카이제곱 검정 카이제곱값 - 빈도가 그룹 간 얼마나 다른가? - 각 X값마다 -> 관측값-기댓값 제곱 / 기댓값 -> 의 합이 카이제곱(x제곱) 카이제곱 분포 - 카이제곱값이 나타날 확률은 카이제곱 분포를 따른다. - k개의 서로 독립적인 표준 정규 확률 변수를 각각 제곱해서 계산한다. 이때 k는 자유도. 카이제곱 계산 - 카이제곱값을 계산하려면 기대 빈도를 구해야한다. - 알츠하이머에 걸린 사람 500명(질병군)과 아닌 사람 1500명(대조군)에 대해서 각 유전변이가 나타나는 빈도를 구했음 - -> 유전변이 s1이 질병 100명, 대조군 100명에서 나타났을때 이 빈도는 얼마나 유의할까? cf) 생각 - 만약 위 케이스가 이항분포 섹션이었다면? - 알츠하이머에 걸린 사람 500명(질병군)과 아닌 사람 1500명(대조군)에 대해서 각 유전변이가 나타나는 빈도를 구했음 - -> 이 유전변이가 알츠하이머와 상관이 있는지를 구해보자. 여야 할것이고 - -> 분석 케이스가 상관있다 없다 니까 - -> 상관없을때 나타나는 확률 x가 주어졌어야 했을것임 - 카이제곱에서는 - -> 이 빈도가 유의미한지 아닌지이고 - -> 분석 케이스가 유의미하다 아니다 니까 - -> 유의미하지않을때 나타나는 확률 x가 필요함 근데 유의미하지않으면 동등한거니까 이미 1/2로 나와있는 셈. 다시 카이제곱 계산 - 유전변이 s1이 질병 100명, 대조군 100명에서 나타났을때 이 빈도는 얼마나 유의할까? - 일단 기대빈도 구하기 - 2000명 중 200명에 유전변이가 나타난거니까 기대 빈도는 150명, 50명 / 관찰 빈도는 100명, 100명. - contingency table을 만든다 - 그리고 '관측값-기댓값 제곱 / 기댓값'을 구해서 합해준다. - 카이제곱값은 74.074가 나온다. 카이제곱 검정 - 계산된 카이제곱값은 74.074는 얼마나 유의한 값인가? - 카이제곱 검정을 하려면 자유도 k가 몇인 카이제곱분포를 따를지 판단해야한다. - `n*m` 표의 관측값을 위한 자유도는 `(n-1)*(m-1)`로 계산한다. - 그리고 0-가설은 '유전변이가 질병과 상관없다'로 놓고 통계 분석을 하면 - p value 계산결과는 7.524E-18로, 유전변이가 질병과 상관없다고 가정한 세상에서는 저 결과가 저 빈도로 나올 확률이 거의 없다. - 즉 유전변이가 질병과 상관 있다. 자유도 - 환자 500명에서 변이 빈도가 100명이면 변이가 없는 빈도는 400이다. - 100과 400은 2개의 숫자이지만 하나만 자유롭게 바뀔수있고 나머지하나는 하나가 결정되면 결정되어버리는 종속변수다. -> 2-1=1 - 정상인 1500명에서도 동일하다 -> 2-1=1 - 그럼 1+1은 2인가? - 아님. 총 빈도가 200이기 때문에 정상인 빈도와 환자 빈도 둘중 하나가 또 종속이고 - 그래서 자유도는 1이다. 카이제곱 독립성 검증이 하는일 - 질병의 유무와 유전변이의 유무가 독립적인가?를 검증한다. 출처 책 빅데이터&인공지능 with 생물정보학#생물정보분석2026-01-09 ⋯ 생물정보분석 #2 pandas numpy 데이터 처리데이터 처리 pandas scipy sklearn - pandas로 데이터프레임으로 데이터를 확인하고 - scipy와 sklearn에서 통계 패키지와 머신러닝 패키지를 사용한다 numpy - python이 제공하는 머신러닝 패키지는 sklearn인데 이를 사용하려면 numpy를 알아야 한다. - tensorflow같은 딥러닝 패키지들이 입출력을 위해 numpy를 사용한다 - numpy는 다차원 배열인데 포함된 모든 데이터는 같은 형식이어야한다 - 머신러닝을 하고싶으면 float 형식으로 만들어진 다차원 배열이 필요하다. pandas 쓰는 이유 - 데이터가 표 형식이라도 그 안에는 여러 type의 데이터가 혼재되어 있고 행과 열의 라벨 등이 문자열일것인데, 이를 읽어들이는 도구가 pandas. - 텍스트 파일이나 엑셀 파일을 데이터프레임으로 통째로 옮겨올 수 있다. 데이터 확인 - 원래 책에서는 Variant and risk allele, P-value, P-value annotation, RAF, OR, Beta, CI, Mapped gene, Reported trait, Trait(s)를 컬럼으로 갖고있어서 수정해줬다. - assoc를 확인해보면 비어있는 데이터도 많고 - 숫자 사이에 텍스트가 들어가있는 경우도 있다 - 파이썬은 루프를 돌면서 작업을 하는 것을 매우 꺼린다. - 대부분의 언어에서는 for loop를 돌면서 값을 채워야 하지만 파이썬은 이런 경우에 누가 만들어두었을 가능성이 크다. 데이터 전처리 - pandas 전처리 상황 - 파일은 보통 비어있는 데이터가 있거나 - 숫자 사이에 텍스트가 들어가있어서 제대로 읽히지 않을 수 있고 - 클래스로 나눠야 할때도 있다. 텍스트로 된 열을 숫자형으로 바꾸기 - 수치로 표현되는 P-value와 OR을 확인해보기. - 내 데이터에서는 모두 float이지만 책에서는 P-value의 dtype이 object이다. - "8 x 10-9"와 같이 적혀있기 때문. - pandas는 8E-9 식으로 된 문자열은 쉽게 float로 바꾼다. 따라서 'x 10' 대신에 'E'를 넣으면 된다. float가 아닌 데이터를 사용하기 위해 클래스로 나누기 - 데이터로 머신러닝을 돌려보려면 float 형식이 일반적이고 - 여기서는 2개 컬럼을 쓸수있는 셈이다 - float만 아니라 trait 같은 문자열 데이터도 사용하고 싶으면 categorial(범주형) 데이터로 바꿔주면 된다. 원핫 인코딩 - 범주값을 0,1로 표현하는 것 - 이미지를 분석하는 딥러닝 모델을 만들었을때 자동차, 비행기, 고양이, 개 이렇게 4개의 이미지를 학습시켰다고 하면 - 데이터에 1번 사진은 고양이, 2번 비행기 이런식으로 정답을 지정해줘야 하는데 - 이럴때 원핫 인코딩을 쓴다. 데이터 전처리 - numpy numpy로 만들기 - 작업을 pandas로 한 뒤에 머신러닝을 하기 위해서는 numpy로 만들어야 한다. - 위에서 말했듯 numpy의 요소들은 모두 같은 형식을 갖게 된다. numpy로 데이터 다루기 - 수학이나 과학의 연산에서 행렬을 통째로 연산하는 경우가 많은데 이를 위한 파이썬 패키지가 numpy - ndarray는 특정 타입의 데이터로 이루어진 다차원 배열(array). - numpy는 파이썬의 문법만 가지고 있을 뿐 내부 구현이 C 등의 컴파일 언어로 작성되어 있어서 실행속도가 빠르다. - 그래서 수치 데이터 처리에서 파이썬을 사용할 때 대부분의 라이브러리가 numpy를 기반으로 한다. numpy와 broadcasting - 행렬과 하나의 수를 곱하면 행렬의 모든 값에 그 수를 곱한 효과가 나타난다. - C같은 다른 프로그램에서 배열에 하나의 수를 곱하려면 for loop를 사용해야 하는데 numpy가 있으면 빠르게 할수있다. - array와 수 하나의 연산이 가능하듯이 높은 차원 array와 낮은 차원 array 사이 연산도 가능한데 - 이때 낮춘 차원의 수가 높은 차원 쪽으로 broadcasting 된다. - ar4는 1차원 배열 1x4였고 ar1은 4x4 2차원 배열이었는데 그 두개를 더하면 ar4의 첫번째 열의 요소인 1이 ar1의 첫번째 열의 모든 요소인 1,1,1,1에 더해진다. - ar4T는 1차원 배열 4x1이고 ar1과 더하면 ar4T의 첫번째 행의 요소인 1이 ar1의 첫번째 행의 모든 요소인 1,1,1,1에 더해진다. - broadcasting의 활용처? - 1만개 샘플에 대해서 데이터가 100개씩 있는데, 각 샘플 단위로 표준화를 하려고 할때 - 먼저 각 샘플별로 평균과 표준편차 1만개를 구하고 - 1번 샘플의 100개 데이터를 모두 1번 샘플의 평균으로 빼고 표준편차로 나눠야 한다. - 이를 차원별 broadcasting을 쓰면 빠르게 할수있다. numpy의 차원축소 평균(reduce mean) - 1만개 샘플에 100개 데이터면 데이터 크기는 (10000,10)이다. - 평균은 100개에 대해서만 구하면 된다(1만번). - 즉 첫번째 차원(행)을 건드리지 말고 두번째 차원(컬럼)을 축소시키면서 평균을 구하면 된다. - 두번째 차원은 axis=1이다. numpy와 이미지 데이터 - 딥러닝 데이터로 400*300 픽셀의 컬러(보통 RGB 채널) 이미지를 1000개 모아둔 array - 즉 1000개 이미지 데이터 만들고 확인하기 - 이미지 데이터로 딥러닝을 하기 위해서는 - 먼저 이미지 파일을 읽어서 numpy array로 만든다. - 딥러닝은 수천개 이상의 이미지를 동시에 입력해서 학습하는데 - 때문에 이 numpy array들을 하나의 큰 array로 묶어두게된다 - 이때 - 일부 이미지는 크기를 바꾸거나 노이즈를 입히는 등 가공해야할수도 있다. - 중간중간에 이미지가 제대로 가공되는지 확인해야하는 경우도 있다. - 최근 딥러닝에 tensorflow가 많이 사용된다. - tensorflow의 연산도 numpy와 비슷하다. 출처 책 빅데이터&인공지능 with 생물정보학#생물정보분석2026-01-06 ⋯ 생물정보분석 #1 bash, python, bioinformatics생물정보학의 데이터 정보학 - 서로다른 두 종류의 데이터를 연결해서 새로운 데이터를 만들수있다. - 일일이 알고리즘을 설계하고 직접 구현하기가 어렵기 때문에 툴을 사용하면 된다. - 다만, 툴을 쓰면서 정보학 지식에 대해서 필요성을 느끼고 지속적으로 갖춰가야한다. - ex. 데이터 더미에서 불필요한 부분을 없애는것과 정렬 작업 중 무엇을 먼저 할까? 생물정보학 - 수학, 통계, 컴퓨터과학을 이용해서 방대한 양의 생물학 데이터를 분석하고 - 유전자의 발현과 같은 생명 현상을 이해하는 학문. 질병 관련 단백질 찾기 - 항원항체 반응 - 특정 질병과 연관된 단백질을 찾기 위해서는 발현된 특정 단백질을 찾는 '항원-항체' 반응을 이용한 단백질 검출 방법을 써야했다. - 수만종의 단백질을 모두 확인하려면 각 단백질별 항체를 종류별로 갖춰야하기 때문에 해당 질병과 가능성이 가장 높은것 같은 몇몇 단백질에 대해서만 확인가능했다. 오믹스(genomics) - 유전자 전부를 변수로 삼아 생명 현상을 설명하는 학문이 유전체학(genomics). - 유전체 정보만으로는 생명현상을 제대로 이해할 수 없어서, 생명 현상을 좌우하는 다른 변수들을 찾기 위해 다양한 데이터를#생물정보분석2025-09-22 ⋯ ML #3 HPO, XAI 실습1. 실습 개요 - 목적 - UCI Breast Cancer 데이터를 로드하고 전처리 후 XGBoost 모델을 구축 및 평가 - 교차검증(StratifiedKFold, KFold)과 하이퍼파라미터 탐색 기법(RandomizedSearchCV, Optuna)을 비교하여 최적 성능을 도출 - SHAP을 활용하여 전역적·집단적·개별적 수준에서 해석력을 확보하고 도메인 지식과 연결 - 구현 - 데이터 로드: UCI Breast Cancer 데이터셋 - 데이터 전처리: 타겟(Diagnosis)을 이진화(M=1, B=0), StandardScaler로 범위 스케일링, 상관계수 0.9 이상인 중복 변수 제거 - 모델 구축: xgboost.XGBClassifier - 모델 평가: 정확도, AUC, 분류리포트, 혼동행렬, feature importance - 교차검증: KFold, StratifiedKFold - 하이퍼파라미터 최적화: Random Search, Optuna TPE - 모델 해석 (SHAP) - Bar Summary Plot: 전역적 중요도(평균 |SHAP|)를 통해 주요 변수 확인 - Beeswarm Plot: 변수 값 크기(빨강/파랑)와 방향성(+/−)에 따른 분포 해석 - Force / Waterfall Plot: 3가지 개별 환자 샘플(예측 확률 극단/불확실, SHAP 영향력 최대, 도메인 특이 케이스)을 선택하여 모델이 어떤 요인 때문에 해당 예측을 내렸는지 설명 2. 실습 보고서 링크 - https://open-trust-407.notion.site/AI-2-XAI-274766ec530e80c8977cd13e3c27af84?source=copy_link 3. 프롬프팅1 - 하이퍼파라미터별 의미 - 값이 클수록? - n_estimators (트리 개수): 크면 학습을 오래 시킴, 성능을 높일 수 있음, overfitting - max_depth (트리 깊이): 깊으면 데이터의 세부 패턴까지 학습해 overfitting - learning_rate (학습률): 크면 빠르게 학습하지만 최적점을 지나쳐 버릴 수 있어 overfitting. 작으면 한 스텝씩 조심스럽게 학습해 일반화 성능은 좋아지지만 많은 트리 n_estimators가 필요할수있음. - subsample (샘플 비율): 크면 variance가 크고 overfitting. - colsample_bytree (특성 샘플링 비율): 1.0이면 모든 피처를 쓰고 낮추면 랜덤성을 주므로 모델 다양성을 높여 overfitting 완화. 4. 프롬프팅2 - SHAP 플롯 해석법 1. Bar Summary Plot - 봐야하는것: 막대 길이 - 막대 길이가 길수록 전체 모델 예측에서 해당 변수가 차지하는 중요도가 크다. - 해석 포인트 - 막대 길이가 길다: 전역적으로 중요한 변수 - 막대 길이가 짧다: 영향력이 거의 없는 변수 2. Beeswarm Plot - 봐야하는것: 막대 길이, 방향성, 색깔 - 막대 길이의 분포가 넓을수록 샘플별로 변수 효과가 다양하다. - 방향성이 +일수록 예측값을 올린다, -일수록 예측값을 낮춘다. - 색깔이 빨강 = 변수 값이 크다, 파랑 = 변수 값이 작다. - 해석 포인트 - 막대길이와 방향성 조합 - 막대길이가 길고 방향성이 양수: 변수 값이 커질수록 예측 확률을 크게 올린다. - 막대길이가 길고 방향성이 음수: 변수 값이 작아질수록 예측 확률을 크게 낮춘다. - 막대길이가 짧거나 방향성이 양/음 혼재: 전체에 미치는 영향은 작음. - 색깔과 방향성 조합 - 빨강이면서 방향성이 양수: 값이 클 때 예측값↑ - 파랑이면서 방향성이 음수: 값이 작을 때 예측값↓ - 원칙적으로는 위와 같은데 - 빨강이면서 음수에 몰림: 값이 클수록 오히려 예측값↓ (역효과) - 파랑이면서 양수에 몰림: 값이 작을수록 오히려 예측값↑ (역효과) - 이런 경우는 보통 - 비선형 관계: 변수 값이 커질수록 예측이 올라가다가, 일정 임계점 넘으면 오히려 내려가는 경우 - 상호작용 효과: 다른 변수와 조합됐을 때만 특정 방향으로 작용하는 경우. 3. Force / Waterfall Plot (개별 샘플 해석) - 봐야하는것: 막대 길이, 방향성 - 막대 길이 길수록 해당 샘플의 예측에 기여한 정도가 크다. - 방향성이 +일수록 예측값을 기준선(Base Value)에서 올리는 요인, -일수록 낮추는 요인. - 해석 포인트 - 막대길이가 길고 방향성이 양수: 이 변수 때문에 해당 샘플의 예측 확률이 많이 올라감. - 막대길이가 길고 방향성이 음수: 이 변수 때문에 해당 샘플의 예측 확률이 많이 내려감. - 막대길이가 짧음: 해당 샘플에서는 영향이 거의 없음.#SKALA #ML2025-09-19 ⋯ ML #2 regression, instance 기반 알고리즘ML 방법론 - 통계기반 방법론은? - linear regression이나 logistic regression 같은걸 말함 - 가설과 근거가 명확히 세워져 있고 - 데이터가 알고리즘에 맞게 정제돼있고 - 통계적 유의성으로 결과가 나오는 깔끔한 방식 - ML 방법론은? - 작은 경연을 열듯 시행착오를 거치며 가장 적합한 모델을 찾는다는 컨셉이다. 지도 비지도 준지도 - 모두 입력 데이터에 존재하는 구조를 추론함 - 준지도 - 이상 탐지: 처럼 라벨링 비용이 클때 - 딥러닝: 은 파라미터 수가 많아 안정적인 학습을 위해 충분한 데이터가 필요한데 - 우선 라벨이 있는 데이터로 기본 학습을 진행하고 -> 라벨이 없는 데이터의 구조나 의사결정 경계를 활용해 모델을 보완함 regression, instance based algorithm - 알고리즘을 일하는 방식의 유사성에 따라 묶으면 regression, instance based algorithm. - regression - 선형 회귀 - 모델이 예측한 값과 실제 값의 오차를 측정하는 전형적인 선형 기반 방법이고 - 로지스틱 회귀 - 작은 선형 회귀들을 이어붙여 분류 문제를 푸는 방식. - instance based algorithm - 유사 사례를 구축해놓고 내가풀려는 케이스랑 유사한케이스를 찾아서 그걸기반으로 의사결정. - 정석적인정의는? - 데이터 그 자체를 중요한 정보로 삼아 의사결정을 내리고 - 유사 사례를 저장해 두었다가 새로운 입력이 들어오면 가장 비슷한 사례를 찾아 예측에 활용. - k-최근접 이웃(kNN) - 데이터 불균형 조정에도 활용 - Lazy Learning - 데이터만 잘 저장해 두면 학습이 끝난 것으로 볼 수 있지만 예측 시에는 거리 계산을 반복해야 하므로 데이터가 많을수록 연산이 무거워질 수 있다. - instance based algorithm의 대표는 kNN이고 느슨하게 해석하면 서포트 벡터만을 활용해 예측하는 SVM도 포함될 수 있다. - 다만 SVM은 정확히는 거리 기반이 아니라 커널 기반 모델이지만... - 전체데이터를 다 바라보는게 아니라 소수의 인스턴스(서포트벡터)에 집중한다는 점에서 유사하게 분류되기도 한다. 불편 추정량 (p.11) - 안정적인 추정량을 얻으려면? - 주어진 데이터로 기울기와 절편을 예측할건데 1. 기울기와 절편 추정치들의 분산이 작게 나와야한다. - 이를 위해서는 분자는 작고 분모는 커야 하고 - 표본 수 n이 많을수록 1/(n-1)이 작아져 (기울기와 절편의) 분산이 줄어들어 더 안정적인 추정이 가능하다. 2. 입력 변수 x의 분산은 충분히 커야 예측력이 높아진다. - 다만 x의 분산이 지나치게 넓으면 분류가 어렵고 반대로 값들이 한곳에 몰려 있으면 y를 구분하기 힘들다. linear 모델의 강건성 - 강건성 - 선형 모델을 선택하는이유? - 복잡한 모델에 비해 가정들을 잘 충족하며 다양한 상황에서 안정적으로 작동하기 때문에. - 복잡도를 높이면? - 학습 데이터에서는 성능이 향상되지만 실제 테스트 데이터에서는 어느 시점 이후 오히려 성능이 떨어지면서 오버피팅이 발생한다. - 데이터 분포가 조금만 바뀌어도 성능이 무너질수있는데 단순한 모델은 이런 변화에도 비교적 강건하게 대응한다 - 즉 조건이 바뀌거나 노이즈가 생기더라도 입력의 작은 변화가 출력에 크게 영향을 주지 않기 때문에 모델의 성과가 오래 유지된다. knn (p.14) - knn은 사람의 의사결정 방식에서 착안한 사례 기반 추론 알고리즘이다. - 새로운 사례가 등장했을 때 과거의 유사한 문제와 그 답을 참고해 판단을 내린다는 아이디어에 기반하는데 - 예를 들어 분류 문제에서. - 어떤 점이 별 모양인지 삼각형인지 결정하고 싶다고할때 그림에서 기준을 K=3으로 두면 가장 가까운 세 개 중 다수가 삼각형이므로 삼각형으로 분류되고 K=7로 두면 별이 더 많아져 별로 분류된다. - 회귀 문제에선 - 입력 변수가 하나일 때 테스트 포인트가 주어지면 가장 가까운 K개의 값을 찾아 그 평균이 예측값이된다 - K=3이라면 가까운 세 개의 y값을 평균내어 예측하고, K=1이라면 가장 가까운 하나의 값이 그대로 예측 결과가 된다 - 즉 K가 클수록 추정은 부드럽지만 세밀함이 줄고 K가 작을수록 개별 사례의 영향을 크게 받아 예측이 민감해진다 knn에서 좋은 이웃? - 좋은 이웃을 어떻게 정할까? 1. 어떤 유사도를 측정할까 - 보통 데이터를 벡터로 변환한 뒤 거리 기반으로 유사도를 평가함 - 이때 어떤 거리 메트릭을 쓸지? - 기본적으로 많이 쓰이는 것은 유클리디언 거리. 맨해튼 거리도 있고 이를 일반화*한 것이 민코프스키 거리. - 일반화? - 맨해튼은 두점사이 x축 y축 평행 거리. 유클리디언은 직선 거리. - 민코프스키는 맨해튼, 유클리디언 둘다에 해당하는 공식. 차수 p를 어떻게 주느냐에 따라 다른 거리가 나오고 p=1이면 맨해튼 p=2이면 유클리디언 p=∞이면 체비셰프 거리. - cf) - 어떤 속성을 거리 계산에 포함할지 얼마나 반영할지는 전처리 단계에서 결정되고 중요하지 않은 변수를 제거하거나 가중치를 달리 부여해 조정할 수 있다. - 어떤 속성을 거리 계산에 포함할지(중요하지 않은 변수를 제거) - KNN은 “학습으로 규칙을 만들어내는” 모델이 아니라 “그대로 두고 거리만 재서 판단하는” 모델이라서 예측의 성패가 모델 내부 파라미터가 아니라 우리가 미리 만들어 놓은 좌표계—즉 어떤 축들(특성)을 쓸지, 각 축을 얼마나 길게 혹은 짧게 잡을지—에 달려 있다. - 얼마나 반영할지 - 특정 축을 스케일링해서 더 길거나 짧게 만드는 일. - 중요한 특성에는 자를 늘려 그 방향 차이가 크게 반영되게 하고, 덜 중요한 특성에는 자를 줄여 그 차이가 작게 반영되게 만든다. - 수식으로 보면 특성마다 계수(스케일)를 곱해 좌표를 변환한 뒤 민코프스키 같은 거리 공식을 적용하는 것과 같다. 좌표계를 바꾸면 같은 두 점이라도 거리가 달라지고, 거리가 달라지면 “가까운 이웃”의 순위가 바뀌고, 결국 예측이 달라진다. 2. 가중치를 적용할것인가? - 단순 다수결(voting)을 쓰면 모든 이웃을 똑같이 취급하지만 실제로는 가까운 이웃이 더 중요하다고 보고 거리 기반 가중치를 적용할 수 있다 - (가장 가까운 두세 개 이웃은 크게 반영하고, 나머지는 약하게 반영하는 식) - 사이킷런 같은 라이브러리에서는 기본값이 uniform(모두 동일)이고 distance 옵션을 선택하면 거리에 반비례해 가중치를줄수있다. - cf) - 거리 기반 말고 다른것도있나? - “거리 기반”도 형태가 매우 다양하고, 랭크/커널/밀도/시간/클래스 비용 등 목적에 맞게 이웃의 표를 설계할 수 있다 데이터가 불균형·노이즈·개정 주기가 크다면 단순 distance기반보다 다른 전략들이 더 견고하게 먹히는 경우가 많다. - 순위(랭크) 가중치: 거리값 대신 “가까운 순서”로만 가중치 부여. 예) 1등=1, 2등=1/2, 3등=1/3 …처럼 내림 가중. - 커널 가중치: 가우시안, Epanechnikov, 삼각형 등 커널을 써서 부드럽게 감쇠. 수학적으론 거리 함수지만, 1/d 타입보다 훨씬 유연한 모양을 가짐. - 클래스/코스트 가중치: 불균형 완화를 위해 희소 클래스 표에 더 큰 가중. 실전에서는 리샘플링(SMOTE/ENN/CNN 등)이나 사후 의사결정 임계값 조정과 함께 씀. - 밀도/신뢰도 가중치: 이웃 점의 로컬 밀도(또는 LOF 같은 이상치 점수), 지역 정확도(leave-one-out 성능)로 신뢰 높은 이웃 표를 키우고, 의심스러운 이웃 표를 줄임. - 시간 감쇠 가중치: 시계열·온라인 데이터에서 최신 사례에 더 큰 표를 주는 방식. - 공유 최근접 이웃(SNN) 기반: 두 점이 “공유하는 이웃 수”로 유사도를 정의해 그 값으로 가중. 순수 거리 대신 그래프적 근접성을 씀 svm - 서포트벡터? - svm의 핵심은 두 집단을 가장 크게 벌려 나누는 선형 경계를 찾는 것인데 - 이때 경계에 가장 가까이 붙어 있는 점들이 ‘서포트 벡터’이고 - 마진을 최대로 하는 최적화 문제를 풀면 자연스럽게 어떤 점들이 서포트 벡터로 선택된다. - 마진을 최대로 한다? - “두 집단을 가르는 결정경계(직선/평면)를 중심으로, 양쪽 클래스가 비어 있는 완충지대(버퍼)를 가장 두껍게 만들자”. - 완충지대의 두께가 마진인데 마진이 두꺼울수록 경계가 흔들려도(노이즈·분포 미세 변화) 오분류로 넘어가기 어렵기 때문에 일반화가 좋아진다. - "데이터 전체를 안 쓴다"의 의미? - 해의 형태가 서포트 벡터에만 의존하므로 모든 표본이 아닌 경계 부근의 소수 표본만이 결정에 실질적으로 기여한다는 의미. - 덕분에 경계에서 멀리 떨어진 외곽 이상치의 영향은 상대적으로 작아 강건성이 생긴다. - 소프트 마진? - 현실 데이터의 노이즈를 허용하기 위해서 소프트 마진을 씀 - 위반 정도를 나타내는 슬랙 변수의 총합에 패널티를 주는 C를 함께 최소화한다. C를 크게 잡으면 위반에 대한 벌점이 커져 오류를 덜 허용하는 경계가, 작게 잡으면 더 너그러운 경계가 나온다. - svm에서 하이퍼파라미터? - 하이퍼파라미터는 모델이 학습을 통해 스스로 조정하는 값(예: 회귀계수, 신경망의 가중치)과 달리 학습 전에 사람이 직접 정해줘야 하는 설정값. - svm에서 C는 "오류를 얼마나 용인할것인지" - 결정 방법은? - 보통 validation set으로 성능을 비교하거나 교차검증을 돌리면서 가장좋은성능을주는값을 선택하거나 - 도메인 지식을 쓴다: 데이터가 매우 노이즈가 많다 하면 C를 크게 두는건 불리하니 오히려 작은 C가 적합할수있다 - 단점? - 기본적으로 이진 분류를 위한 알고리즘이어서 다중 클래스 문제를 다루기 위해서는 one-vs-one이나 one-vs-rest 같은 확장 방식을 사용해야하는데 - 피쳐 수가 많거나 라벨 종류가 늘어나면 학습과 예측 속도가 급격히 떨어질 수 있다. decision tree 기반 앙상블모델 - 결정트리 기반 앙상블(random forest, gradient boosting)은 각 특성의 실제 값에 따라 분기를 만들어 규칙을 쌓아 가고 - 분류에서는 불순도(지니·엔트로피)를 줄이고 회귀에서는 리프의 예측 오차(MSE·분산)를 줄이도록 학습한다. - 분류와 회귀의 이해 - 회귀를 “선을 긋는 것”, 분류를 “가까운 것끼리 묶는 것”으로 단순화하기보다는 - 회귀는 수치 오차를 최소화하는 함수 추정, 분류는 손실(또는 불순도)을 최소화하는 경계 학습으로 이해하는 것이 정확하다. - 과적합을 막기 - svm - svr(회귀) 과적합 제어는 ‘ε-무감도 손실(ε-insensitive)’과 C(위반 페널티)로 수행 - svc(분류) 에서는 ε를 쓰지 않고 소프트 마진 + C로 마진 위반을 얼마나 허용할지 제어 - C 커지면 복잡도 커져서 과적합 위험. - 트리 계열은 최대 깊이·리프 최소 표본 수·가지치기·학습률(부스팅)·트리 수(앙상블) 같은 복잡도 제어로 과적합을 막는다. - 결론 - SVR은 ε와 C(그리고 커널 파라미터)로, SVC는 C(와 커널 파라미터)로 과적합을 조절하고 트리 계열은 깊이·노드 최소 표본·가지치기·샘플링·학습률·트리 수(및 조기 종료)로 모델 복잡도를 관리한다. - svm과 트리앙상블 비교 결론 - 트리·앙상블은 값 기반 분기와 모델 복잡도 패널티로, SVM은 마진 최대화와 슬랙, C 조절로 강건성을 확보한다 - 둘 다 분류와 회귀에 쓸 수 있지만 과적합 제어의 수단과 최적화 목표가 다르다. 불순도 - 불순도가 낮다는 건 한 그룹 안에 같은 클래스가 많이 모여 있어 훨씬 명확하다는 뜻. 불순도가 높다는 건 한 그룹 안에 서로 다른 클래스가 많이 섞여 있어서 결과를 이해하기 어렵다는 뜻. - 어떤 방식으로 데이터를 나눠야 불순도가 더 많이 줄어들까? 해보기. 1. 처음 데이터의 Gini 지수가 0.42라면? - 꽤 섞여 있어서 완전히 깨끗하지 않은 상태. 2. 특성 A로 분할을 시도해 본다. - 왼쪽 그룹과 오른쪽 그룹으로 나누고 나서 다시 각 그룹의 불순도를 계산했는데 -> 두 그룹이 완전히 한쪽 클래스만 포함하게 되어 Gini 지수가 0이됨 - 원래 0.42였던 불순도가 0으로 줄었으니까 0.42만큼의 불순도가 줄어들었고 0.42만큼 정보를 얻었다. 3. 특성 B로 나눠본다. - 나누고 나니 -> 그룹 내부에 여전히 섞임이 남아 있고 Gini 지수가 0.342. - 원래 0.42에서 0.342로 줄었으니 0.078만큼의 불순도가 줄어들었다 4. 결론 - 불순도를 줄인 양을 봤을때 즉 정보 이득을 봤을때 특성 A로 나누는것이 정보 이득이 훨씬 크다고 결론내려서 해당 노드에서 분할A를 선택한다 - 결론 - 부모는 섞여 있었는데 자식으로 갈수록 덜 섞여 있으면, 그만큼 정보를 더 알아낸 것. - 분할을 통해 트리 성장 = 섞인 것을 덜 섞이게 만드는 방향으로 선을 긋고, 그 과정을 반복해서 더 순수한 그룹을 만드는 것.#SKALA #ML2025-09-13 ⋯ ML #1 알고리즘, 불순도 측정ML type (p.31-33) - ML의 학습방법 3가지 - 지도학습(Supervised) - 입력 데이터와 출력 데이터가 모두 제공되고 모델은 입력을 보면 어떤 출력이 나와야 하는지를 배움. 학습한 모델은 새로운 데이터가 들어오면 예측을 하고 -> 결과를 실제 정답과 비교해 정확도 계산. - 비지도학습(Unsupervised) - 문제는 있지만 정답 라벨이 없음. 비슷한 특징을 가진 학생들을 묶어서 그룹을 만들고 어떤 그룹이 우수한지 알 수 없지만 데이터 안에서 자연스럽게 나타나는 구조를 파악한다(클러스터링) - 준지도학습(Semi-Supervised) - 라벨이 붙은 소량의 데이터와, 라벨이 없는 대량의 데이터를 동시에 사용하면 더 나은 모델을 만들 수 있다 왜냐하면 100% 라벨링된 데이터가 있을 때만큼 정확하지는 않지만, 현실에서는 라벨링이 부족한 경우가 많고 라벨 없는 데이터가 양은 많아서 데이터 분포를 더 잘 보여주기 때문이다. 머신러닝 알고리즘 (p.34) - 트리 기반 방법(CART) - 결정트리(Decision Tree) - 데이터를 여러 조건으로 나누어가면서 최종 답을 찾는다 예를 들어 "이 과일은 달콤한가?" -> "색깔은 빨간가?" -> "크기는 작은가?" 같은 질문을 따라가면서 사과, 딸기, 체리처럼 답을 얻는다. - 랜덤포레스트(Random Forest) - 결정트리를 하나만 쓰지 않고 여러 개를 무작위로 만들어서 숲을 형성하고 각각의 나무가 약간씩 다른 조건을 사용하기 때문에 전체적으로는 더 튼튼하고 안정적인 예측을 한다. 여러 명이 각자 판단한 결과를 모아 집단지성을활용함. - 커널 기반 방법(SVM) - SVM은 통계학자가 아니라 항공우주 연구자들이 만든 알고리즘. - 우주에서 달과 그 주변의 별들을 구분하려 한다면 하늘의 모든 별을 고려할 필요는 없고 달의 경계 근처에 있는 몇몇 별만 봐도 구분 선을 그을 수 있다. - SVM은 바로 이 “경계에 가까운 데이터”만 집중해서 보는데 달과 별을 가르는 선을 그을 때 이 선과 가장 가까운 점들과의 거리를 최대화한다 그래서 SVM은 전체 데이터를 다 보지 않고도 효과적으로 두 집단을 구분할 수 있다. - 또한 경계를 그을 때 약간의 오차는 허용하는데 현실 세계 데이터가 완벽하게 나눠지지 않는 경우가 많다는 사실을 고려한 것이다. - 부스팅 - 약한 모델들을 모아서 강한 모델을 만드는 전략. 시험을 본다고 하면 한 학생이 문제를 틀린 부분만 복습하고 또 시험을 본다. 또 틀리면 다시 그 부분만 공부한다. 이런 식으로 반복해서 학습하면 점점 더 성적이 오른다. - XGBoost는 틀린 데이터에 더 높은 가중치를 주면서 여러 약한 트리를 합쳐 성능을 끌어올린다. LightGBM은 XGBoost의 연산 방식을 최적화해서 더 빠르게, 그리고 더 효율적으로 학습할 수 있도록 만든 버전. - 정규화 - 회귀 문제용. - 회귀 모델은 데이터의 입력 변수와 출력 값을 수학적으로 연결하는데 변수가 너무 많으면 모델이 복잡해지고 오히려 예측력이 떨어진다. 정규화는 규칙을 추가해 모델이 과도하게 커지는 것을 막는다. - LASSO는 회귀 계수 중 일부를 아예 0으로 만들어 변수를 줄이는 방법. Ridge는 모든 변수를 유지하되 크기를 작게 줄이는 방법. 둘 다 모델이 단순해지도록 돕고, 과적합을 막아 예측력을 높인다. - “너무 많은 변수에 휘둘리지 말고, 꼭 필요한 신호만 잡아내라”라는 규칙을 주입하는 과정. 지니계수 & 엔트로피 - 불순도 측정방법. - 불순도는 여러 클래스가 얼마나 섞여 있는지. - 지니 계수 - 확률을 가지고 계산. 예를 들어 어떤 마디에 빨간색이 30%, 파란색이 70% 있다고 하면 임의로 두 개를 뽑았을 때 색이 서로 다를 확률을 계산하는데 값이 클수록 섞여 있다는 뜻이고 값이 0에 가까우면 거의 한 가지 색만 있다는 뜻. 즉 무작위로 두 개를 뽑았을 때 다를 확률. - 엔트로피 - 숫자를 맞추는 스무고개 게임을 할때. 상대가 생각한 숫자가 1부터 1000까지 중 하나면 그냥 무작정 맞추는 건 비효율적이고 보통은 반으로 나누는 질문을 한다 “500보다 크냐?”, “750보다 크냐?” 이런 식으로 세 번 질문하면 대략 1000개 중 하나를 알아낼 수 있다. 이때 필요한 질문의 횟수가 정뵤량. - 엔트로피는 질문의 평균 횟수를 수학적으로 표현한 값이다 클래스가 균등하게 섞여 있을수록 질문을 많이 해야 하고 한 클래스가 압도적으로 많으면 질문을 거의 안 해도 알 수 있으니까 엔트로피가 낮다. - 결론 - 지니 계수는 두 개 뽑았을 때 다를 확률을 계산하는 방식이고 엔트로피는 그 집합을 완전히 구분하려면 평균적으로 몇 번 질문해야 하는가를 계산하는 방식. 부스팅 - 한두 번은 맞지만 전체적으로는 성능이 낮은 약한 모델을 여러 개 모아 강한 모델을 만들기 - 모델이 틀린 부분에 가중치를 더 주고, 그다음 모델이 그 틀린 부분을 집중적으로 학습하게 만들고를 여러 번 반복한다. - 손실 함수의 기울기를 계산해서 “어느 방향으로, 얼마나 고쳐야 성능이 나아질지”를 봐서 단순히 틀린 데이터를 다시 보는 게 아니라 오차를 줄이는 방향으로 학습 (그래디언트)#SKALA #ML2025-08-22 ⋯ MLops #2 mlflow 파이프라인1. 코드 트래킹 서버 설정 Experiment 생성 information 확인, 로그 기록 - 동일한 실험(new_experiment) 아래에서 3번의 Run을 수행 - Run이 끝나면 UI에서 iteration과 accuracy의 관계를 확인할 수 있다. 기존 experiment 재사용 2. 코드 실행 시작상태는이렇고 logging_functions.py를 실행 logging functions를 보면 start_run을 써서 3번 돌렷는데 그렇기때문에 /mlruns/2 안에 3번의 run이 저장돼있다.#MLops2025-08-21 ⋯ MLops #1 mlflow 설치 & 실습1. mlflow 설치 및 docker 띄우기 로그인햇으면 도커를 켠다음에 다음을 수행. 확인해보면 제대로 떠있다!! MLflow 서버를 띄웠고 경고창이 뜨는데 호스트 CPU는 ARM64이고 MLflow 공식 이미지는 AMD64여서 플랫폼 불일치 이슈가 있지만 문제되지는 않고 만약에 해결하고싶으면 docker-compose.yml에 아래와같이쓰면 댄다고함. docker ps 해보면 떠있는걸볼수있고 확인후에 http://localhost:5001/ 접속하기 잘들어가있다!! 2. mlflow quick start 튜토리얼 링크 - https://mlflow.org/docs/latest/getting-started/intro-quickstart/index.html 위에서 한 내용이 step1-2여서 step3부터 하면 댄다. - step3는 그냥 사이킷런으로 기본적인 모델 만들기. - step4는 tracking uri를 설정하고 현재 experiment에 대한 name을 MLflow Quickstart로 정한다. - model_info에 step3에서 만들었던 lr 모델을 보낸다. - model loading을 하고 - loading된 model을 가지고 test dataset을 사용해서 prediction을 한다. 3. mlflow experiments 모델 inference를 하면 mlflow의 experiments에 뜬다. (ui에서 information을 볼수있다) 확인하는원리는? - compose.yml을 보면 라고 돼있는데 local의 mlruns 디렉토리를 /mlflow/mlruns 도커 이미지 안에 매핑을 시키면 mlruns 디렉토리내 모든 파일들이 도커 이미지로 들어간다. 확인하는법은? - docker 안으로 들어가서 /mlflow/mlruns 들어가기. 여기서 python tutorial.py를 하면 실행된다. - iris 데이터를 가지고 모델을 만들고 - mlflow가 tracking을 하고 - model을 만들어서 tracking-quickstart라는 이름으로 register를 함 - 그리고 result를 출력. - tracking url은? - compose.yml에 MLFLOW_TRACKING_URI=http://0.0.0.0:5000 로 돼있어서 자동으로 이쪽으로간다(공식 튜토리얼은 mlflow.set_tracking_uri(uri="http://127.0.0.1:8080") tutorial.py에서 run하는부분 코드를 보면 이렇다 암튼 이렇게 Inference를 했고 UI(http://localhost:5001/)를보면 mlflow quickstart가 왼쪽에 생겻고 클릭하면 inference(prediction)한게 나온다. 해당 experiment를 확인해보면 - 모델에 대한 정보 environment conda, python environment, requirements.txt 등이 다 넘어왔고 - tagging이돼있음 - tracking quickstart 누르면 - register된 모델도 아래처럼 뜬다. 정리하면? - mlflow를 docker pull해서 설치하고 inference해서 ui에서 어떻게 flow가 뜨는지랑 모델 register를 확인함.#MLops2025-08-19 ⋯ 데이터 분석 #4 리뷰 데이터 분석1. 목적 리뷰 데이터를 보고 - 감성 점수와 평점의 관계 - 리뷰 길이와 감성 점수의 관계 - 카테고리별 감성 차이 - Review_length가 AI 임베딩 유사도에 영향을 줄 수 있는지 인사이트 생성하기. 2. 코드 3. 생각 결측치 처리 - 나는 결측치가 하나라도 있는 샘플은 다 제거했는데 다른 사람들꺼보니깐 review_text 컬럼의 결측값을 'no review'로 대체하는 경우도 있었다. 이게 낫나? - 리뷰랑 상관없는 인사이트 (감성점수 vs 평점, 카테고리별 감성차이)에는 데이터가 확보되니깐 좋고. - 리뷰 길이가 AI 임베딩 유사도에 영향을 줄수있는지 <- 여기서는 오히려 잘못된 데이터 심어주는게 대지않나 싶음. - 리뷰길이 vs 감성점수의 관계도 마찬가지. 이상치 탐지 - 이상치 탐지는 보통 IQR을 쓰던데 나는 IQR 너무 많지 않나 한두개만 제거하면대는데? 생각해서 챗지피티한테 다른거추천해달라니깐 상하위 1% 추천해주길래 그걸로햇다. - 다른사람들 IQR 한거보니 리뷰길이는 3개 단어개수는 2개등 몇개 안되길래 결과는 비슷햇을듯. (나는 6개 제거됏엇던듯) - 근데 rating이 평점같은데 평점은 1점 줄수있지않나? 특이취향을 제거하는셈이 돼버리니깐 이건 제거안하길 잘한거같다. 이상치 box plot - before box plot그리고 after box plot도 그렷으면 더 이뻤겟다. 상관관계 - 나는 감성 점수 vs 평점, 리뷰 길이 vs 감성 점수, 리뷰 길이 vs AI 임베딩 유사도 비교에서 매번 상관계수를 그냥 구햇는데 - correlation matrix 그린 사람도 있어서 그것도 괜찮은듯하다 - 상관관계 전부다 낮게나왓는데 그건 남들도 마찬가지 같아서 다행이엇다. 감성점수 vs 평점 scatter plot - 장르별로 색깔 다르게한사람 좀 있던데 그림자체는 안이쁘지만 좋은접근같았다. category별 평균평점 - 다른사람들도 어쩔수없었겟지만 아쉬운게 y축 max를 모르니깐 플롯이 다 안이뻣다. 멀 말하고자하는지 잘 안보엿다. 아마 max 5였겠지? 근데이건 정보가 없으니깐.. 리뷰 길이 vs AI 임베딩 유사도 - 이거야말로 어케하란건지 모르겠어서 - 처음에는 랜덤하게고른(사실 첫번째) 기준 리뷰와의 유사도를 다 계산하고 리뷰길이 vs 임베딩유사도의 corr을 구했는데 - 목적이 '모든 리뷰 쌍 간의 임베딩 유사도' 또는 '임베딩 모델의 특성상 길이가 의미 표현에 미치는 영향'을 보는건데 - 내가수행한건 '기준 리뷰와의 유사도가 길이에 따라 변하는지' 본거라 데이터셋 전체의 관계를 본게아니라 한 기준점에 대해서만 수행한셈이 되길래, - 각 리뷰가 다른 모든 리뷰와 가지는 평균 임베딩 유사도를 계산하는 방식으로 다시 했었다 - 남들 어케했는지 궁금했는데 - '기준 리뷰와의 유사도가 길이에 따라 변하는지' 본사람도있고 - 임베딩 어케하는지에따라 다르다 그냥이렇게쓴사람도 있고... - 얘는 답을 몰겟음.#SKALA #데이터분석2025-08-09 ⋯ 생성형 AI #2 Prompt Engineering 실습 미리돌려보기1. VOC 분석 setting - https://openrouter.ai/ - Model: GPT-5 - Temperature: 0.2 (낮게: 일관성 있는 분류 결과) - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result | 번호 | VOC 내용 | 분류 | 판단 근거 | |------|---------|------|----------| | 1 | 복잡한 엑셀 정리에서 해방됐어요. 기존 수작업으로 처리하던 매출/비용 분석을 자동화해 시간 절약 효과를 체감했습니다. | 긍정 | - | | 2 | 회계 비전문가인 마케팅 담당자도 재무 지표의 의미를 쉽게 파악할 수 있었습니다. | 긍정 | - | | 3 | AI 추천 덕분에 세무 위험을 미리 인지했어요. 실제로 부가세 누락 가능성을 사전에 알림 받아, 실제 신고 전에 정정할 수 있었던 점이 유용했습니다. | 긍정 | - | | 4 | 실시간으로 현금흐름을 추적할 수 있어 좋았습니다. 회계팀 없이도 매주 자금 흐름을 파악하고 의사결정에 반영할 수 있었습니다. | 긍정 | - | | 5 | 처음에만 가이드를 받고 나니 반복 작업이 놀랍도록 간단해졌습니다. 설정만 끝나면 이후 반복 업무에서 자동화된 결과물이 기대 이상으로 좋네요. | 긍정 | - | | 6 | 기능은 흥미롭지만, 실제 업무에 어떻게 녹여야 할지 고민이 됩니다. 시스템이 낯설고 기존 워크플로우와 맞물리는 데 시간이 필요해 보입니다. | 부정 | 1. 적용 방법에 대한 명확한 가이드 부족 2. 기존 시스템과의 통합 어려움 | | 7 | 예쁜 그래프가 많긴 하지만 실무상 의미가 뚜렷하게 와 닿지는 않았습니다. | 부정 | 1. 시각적 효과는 있으나 실용성 미흡 2. 구체적인 데이터 분석 기능 부재 | | 8 | AI가 추천해주는 분석은 흥미로웠지만, 최종 결정은 여전히 사람이 해야겠더라고요. 완전한 자동화보다는 보조 도구로 보는 것이 현실적이라 느꼈습니다. | 부정 | 1. AI의 신뢰도 및 정확성 한계 2. 의사결정 과정에서의 자동화 미비 | | 9 | 피벗 기능이나 드릴다운 기능이 있었으면 더 좋을 것 같긴 해요. 보고서 결과는 직관적이지만, 좀 더 상세 데이터를 보고 싶을 때 아쉬움이 있습니다. | 중립 | - | | 10 | 회계 전문가 입장에서는 보안이 필요해 보이지만, 일반 사용자에겐 적합할 수도 있겠네요. 어떤 고객을 주 대상으로 할지 더 명확하면 좋겠습니다. | 중립 | - | | 11 | 일부 기능은 대기업 회계 기준에 맞춰져 있어 간편한 사용을 기대한 소규모 기업에는 과도했습니다. | 부정 | 1. 소규모 기업의 요구사항 미반영 2. 기능의 복잡성으로 인한 사용 장벽 | | 12 | AI 설명이 부족해 불안했어요. AI가 어떤 기준으로 판단했는지, 근거가 불투명해 검토에 시간이 걸렸습니다. | 부정 | 1. AI 프로세스의 투명성 부족 2. 결과 검증에 추가 리소스 소모 | | 13 | 엑셀 연동 시 포맷 오류가 잦았습니다. 업로드한 자료가 표준 포맷이 아닐 경우 오류가 자주 발생했습니다. | 부정 | 1. 데이터 호환성 문제 2. 사용자 입력 오류에 대한 유연성 부족 | | 14 | 초기 세팅에 시간이 좀 걸렸습니다. 계정과목 연결, 은행 계좌 연동 등 초기 설정을 마치기까지 다소 복잡하게 느껴졌습니다. | 부정 | 1. 초기 설정의 복잡성 2. 사용자 편의성 저하 | | 15 | 사용자별 접근 권한 설정이 더 세분화되었으면 합니다. 팀 내 다양한 역할별로 보기 권한을 구분하고 싶었는데 현재는 제한적이었습니다. | 부정 | 1. 권한 관리 기능의 제한성 2. 조직 내 역할별 맞춤형 설정 미지원 | 2. 관리를 위한 규격화된(JSON) 정보 생성 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result 3. 컨설팅 리서치 & 전략 수립 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result 4. 신상품 출시 프로모션(행사) 기획안 작성 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result 5. 이력서 파일 검토 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result 6. 비용관리 엑셀 템플릿 생성 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 1024 system prompt user prompt result ~*링크가 없는데..*~ 7. 마케팅용 기술 블로그 작성 setting - https://openrouter.ai/ - Model: Gemma 3 27B (free) - Temperature: 0.2 - Top-k / Top-p: default - Max tokens: 2048 (1024하니까 말이 끊김) system prompt user prompt - 근데 첨부할 파일이 없길래 그냥했다. result#SKALA #생성형AI2025-08-09 ⋯ 생성형 AI #1 생성형 AI 기초 및 Prompt EngineeringRAG (p.27) RAG의 역할? - 질문을 LLM에 던지기 전에 knowledge corpus에 질문을 미리 검색한다(회사 데이터에 대한 지식 벡터 db). - 질문과 연관된 문서를 찾고 적절하게 만들어서 retrieval 던지면 의도대로 답변이 잘 나온다. LLM 출력 구성 (p.42-45) Output Length (Max Tockens) - 500자로 제한을 걸면 500자로 맞춰주는게 아니라 500자 넘으면 출력을 멈춘다. Sampling Controls - LLM은 다음에 올 단어를 고를 때 미리 계산된 사전 확률분포를 가지고 거기서 하나를 뽑는다 - temperature로 무작위성의 정도를 조절. - temperature를 0으로하면 확률이 가장 높은 단어만 거의 항상 선택 - 그림에서 원래의 확률분포가 가운데 그림처럼 생겼더라도 temp를 0으로 낮추면 첫 번째 그림처럼 가장 높은 확률에 몰빵되어 다른 선택지는 거의 배제된다. - 반대로 temperature를 2로 올리면 확률이 평평해져서 원래 1등이 아니었던 단어들도 선택될 가능성이 높아진다. - 이렇게 임의성을 높이면 흔하지 않은 단어가 튀어나올 확률이 커지고 결과가 예측 불가능해지고 창의성이 늘어난다. - TopK - 다음에 올 단어 후보 중에서 확률이 가장 높은 K개만 남기고 나머지는 버림 - K값이 크면 후보 폭이 넓어져서 더 다양한 결과가 나오고 창의성이 높아진다. - K값이 작으면 몇 개의 후보만 남아서 결과가 더 안정적이고 사실적인 방향으로 수렴한다. - TopP - 누적 확률이 특정 값 p에 도달할 때까지의 상위 후보만 남기기 예를 들어 p가 0이면 항상 가장 가능성이 높은 단어 하나만 선택하고, p가 1이면 거의 모든 단어가 후보에 포함. - TopK TopP를 통과하고나서 temperature 값이 적용된다. - temperature가 낮으면 이 후보 중에서 가장 확률이 높은 단어를 고르는 쪽으로 기울어지고, 높으면 확률 분포를 평평하게 만들어 무작위성이 커진다. 낮은 temperature에서는 사실상 Greedy decoding처럼 정답 하나를 뽑는 느낌이고, 높은 temperature에서는 후보 중에서 랜덤하게 섞어 뽑는 Sampling 방식이 된다. - 흐름예시 1. 다음 토큰 후보마다 사전확률을 계산하고 이 후보들을 확률이 높은 순으로 정렬한 뒤 TopK를 적용하면 예를 들어 K=2일 때 가장 높은 두 개만 남기고 나머지는 모두 버린다. TopP를를 쓰면 누적 확률이 p에 도달할 때까지 후보를 남기고 이후는 잘라낸다. 2. 필터링을 하고 남은 후보들에 temperature를 적용한다. temperature가 낮으면 확률 분포가 뾰족해져서 가장 가능성이 높은 후보를 뽑을 확률이 커지고, 높이면 분포가 평평해져서 확률이 낮은 후보도 비슷한 기회로 선택된다.#SKALA #생성형AI2025-08-07 ⋯ 데이터 분석 #3 회귀분석Oversampling Techinique (p.69-71) - SMOTE - 소수 클래스 포인트 중 하나를 랜덤하게 고르고 - 이웃 포인트 k개를 찾고 - 이 이웃들과의 연결선을 따라 중간 어딘가에 새로운 샘플을 만든다. - 즉 원본과 이웃 사이에 위치한 점들을 생성한다. - 소수 클래스 포인트들 사이의 직선 위에서만 새로운 데이터를 만들기 때문에 실제로는 decision boundary 근처에서 중요한 데이터를 놓칠 수 있다 - Borderline-SMOTE - 소수 클래스의 포인트에 대해 kNN을 수행해서 이웃들을 찾는데 - 이때 이웃 중에서 과반수 이상이 다수 클래스인 경우 위험한 샘플(danger set)으로 간주된다 즉 이 샘플은 결정 경계에 가깝기 때문에 모델 입장에서 헷갈릴 가능성이 높다. - 그런 danger set에 대해서만 SMOTE를 수행하여 새로운 데이터를 생성해서 decision boundary 근처의 소수 클래스 밀도를 높인다. - 이렇게 하면 모델이 중요한 경계 영역에서의 소수 클래스를 더 잘 인식하도록 도와줄 수 있다. - ADASYN - 소수 클래스 포인트마다 kNN을 사용해서 가까운 이웃을 찾고 - 이웃들 중에 다수 클래스 비율 ri를 계산하고 이 ri값이 높을수록 더 많은 데이터를 그 샘플 주변에 생성한다. - 이렇게 하면 학습 데이터에서 어렵고 복잡한 영역에 더 많은 정보를 제공할 수 있기 때문에 모델이 보다 정밀한 분류를 수행할 수 있게 된다. Learning vs Inference (p.3) - Learning - 컴퓨터에게 어떤 일을 시키기 위해서는 먼저 그 일을 어떻게 해야 하는지를 가르쳐야 하는데 이게 Learning. - 예를 들어 "이 사진이 사람 얼굴인지 개 얼굴인지 맞혀봐"라고 한다고 치면 처음에는 컴퓨터가 제대로 못 맞히지만 많은 사진을 보여주고 정답을 알려주고를 반복하면서 컴퓨터는 '이런 모양이면 사람 얼굴이고', '이런 구조면 개 얼굴이구나' 하는 규칙을 배우고 - 예측을 해보고 틀리면 왜 틀렸는지 되돌아가서 네트워크 구조를 수정하는 과정을 계속 반복한다(forward/backward 과정). 이 반복을 통해 점점 더 잘 맞히는 모델로 발전한다. - Inference - 학습이 끝난 다음에 새로운 사진을 주고 "이건 뭐야?"라고 물어보는 단계. 이때는 정답을 알려주지 않는다. - 예를 들어 처음 보는 사람 얼굴 사진을 주면 학습 때 봤던 예시들과 비교해서 '이건 사람 얼굴이네'라고 추측한다. - 이 과정에서는 이미 학습된 모델만 사용하고 그 내부 구조를 바꾸지 않는다 즉 지식을 시험 보듯이 적용만 하는 단계. 상관 분석은 왜 필요할까? (p.15) - (a)와 (b)는 모두 x와 y의 평균값과 퍼짐 정도 즉 표준편차는 동일하다. - 근데 a는 데이터가 거의 직선인반면 b는 흩어져 있어서 서로의 관계가 약해 보인다. - 즉 단순한 통계량만 보면 같아 보이지만 실제로는 전혀 다른 패턴이다. - 상관분석은 두 변수 간의 방향과 강도 다시 말해 x가 커질 때 y도 커지는지 혹은 반대로 작아지는지, 그리고 그 관계가 얼마나 뚜렷한지를 숫자로 나타내서 평균과 표준편차가 말해주지 못하는 두 변수 간의 관계를 정량적으로 보여준다. 자유도 (p.18) - 일부 샘플만으로 진짜 모집단의 표준편차를 추정하려면 그냥 단순히 샘플의 평균으로 계산하면 안 되고 조정을 해줘야한다 왜냐면 샘플은 모집단 전체를 대표하지 못하기 때문에 항상 약간의 편향(bias)이 생긴다. - 그 보정법이 'n-1'이라는 자유도의 개념인데 1을 빼줌으로써 계산된 분산이 모집단 분산보다 작게 나오는 경향을 보완해즌다. - 예를 들어 10개의 데이터를 가지고 표준편차를 계산할때 10이아닌 9로 나눠서 평균을 내는데 그 이유는 실제로 자유롭게 움직일 수 있는 값이 10개 중 9개밖에 없기 때문. - 편차가 1개밖에 없을 때 즉 데이터가 하나뿐일 때? - 이때는 표준편차를 구할수없다 왜냐하면 분산을 계산할 때 0으로 나눈 값은 정해질 수 없기 때문에. - 이 경우는 부정형(indeterminate form)이라고 부른다. 말 그대로 "알 수 없다"는 뜻이다. - 올해 10% 수익이면 내년도 10% 수익이 확실하다는 의미? - 데이터가 하나밖에 없기 때문에 변동성 즉 편차를 측정할 수 없다 - 표준편차가 0이라고 해서 수익이 고정됐다는 뜻이 아니라 아예 그 불확실성을 판단할 방법이 없다. cf) n-1이 아니라 만약 -2를 하면?? - 모델이 실제보다 데이터의 불확실성을 과대평가하는셈. 상관계수와 z-score (p.20) - 각 관측치에 대해 x와 y의 z-score를 각각 계산할 수 있고 - 모든 관측치에 대해 z_x * z_y를 계산하고 다 더하고 평균낸 값과 똑같다. - 엄밀히는 n이아니라 n-1로 나눈거랑 똑같다. 인과관계 (p.25) - 인과관계는 x와 y의 시차를 틀었을때 regression의 결과가 어떻게 달라지는지를 통해 선후관계를 파악한다. 시계열 데이터 (p.33) - 시계열 데이터에서 일반적인 회귀분석의 가정이 깨진다. 그러면 어떻게 회귀분석을 돌리지? -> 시계열 분석의 시작. 회귀직선과 상관계수 (p.34-37) - 평균보다 키가 1표준편차 큰 사람은 몸무게도 1표준편차 클 것이다? - 아님 왜냐면 두 변수 간의 관계가 완벽한 선형이 아니기 때문에. 상관계수가 얼만큼 변하는지에 관여한다. - 즉 키가 평균보다 1표준편차 클 때 몸무게는 평균보다 정확히 1표준편차가 아니라 r배 만큼 증가한다. - 예를 들어 상관계수가 0.8이면 몸무게는 0.8 표준편차만큼만 증가하고 0.5라면 절반 정도만 따라간다. - 모의고사 본고사 시험 사이의 점수를 회귀분석으로 분석. - 모의고사와 본고사 점수 사이에는 어느 정도 상관관계가있다. - 근데 이게 완벽하게 1:1로 이어지지는 않는데 예를 들어 모의고사에서 160점을 받은 사람이 본고사에서는 약간 낮은 점수를 받는 경우가 많고, 반대로 모의고사에서 평균보다 낮은 110점을 받은 학생들이 본고사에서도 꼭 110점 아래를 받는 게 아니라 평균적으로는 오히려 그보다는 약간 높은 120점 정도를 받는 경향이 있다. - 그러니까 한쪽으로 극단적인 값을 보였던 사람들은 다음 측정에서는 평균 쪽으로 다시 돌아오는 듯한 모습을 보인다(평균으로의 회귀 현상) - 점수라는 건 단지 실력만 반영하는 게 아니라 시험 당일의 컨디션이나 운, 문제 유형 같은 우연한 요소들도 영향을 주기때문에 모의고사에서 아주 높은 점수를 받은 사람은 실력이 좋았을 뿐만 아니라 우연히 좋은 조건이 겹쳤을 수도 있어서 본고사에서는 점수가 조금 낮아질 가능성이 크고 반대로 모의고사에서 낮은 점수를 받은 사람도 사실은 실력보다 약간 덜 나온 걸 수 있어서 본고사에서는 평균으로 되돌아오는 경향을 보인다. - 그래프로 보면 모의고사 점수가 x축, 본고사 점수가 y축일 때, 모든 점들을 연결하면 하나의 퍼진 구름처럼 보이고 - 그 위에 회귀선을 그리면 이 선은 꼭 대각선이 아니라 약간 눕는다. 즉 극단적인 점수를 받은 사람일수록 그 다음 점수는 평균 쪽으로 더 가까워진다. 결론 - 회귀효과는 실력과 운이 섞여 있는 측정 결과에서, 두 번째 측정에서는 우연한 요소가 줄어들면서 평균으로 돌아가는 현상. 회귀모형의 평가 (p.41) 설명력 - 어떤 현상을 설명하기 위해 회귀선을 그린다 - 예를 들어 키로부터 몸무게를 예측하거나, 공부 시간으로부터 시험 점수를 예측하기위해 회귀선을 그린다. - 이때 회귀선에서 궁금한건? - 이 직선 즉 회귀식이 실제 데이터를 얼마나 잘 설명하고 있을까? - 이걸 수치화한게 결정계수 R². 오차 - 그림의 데이터를 보면 각 점(실제 관측값)이 퍼져 있고 회귀직선은 이 점들을 가장 잘 통과하는 직선. - 그리고 실제 데이터와 예측값 사이에는 늘 오차가 존재하는데 두가지로 나누면 - 회귀선으로 설명할 수 있는 부분 즉 데이터가 평균에서 얼마나 벗어났는지를 회귀선이 얼마나 잘 설명했는지(SSR) - 회귀선이 설명하지 못한 부분 즉 예측값과 실제값 사이의 차이(SSE). R²의 해석 - SSR / SST는 전체 변화량 중에서 회귀선이 설명한 비율. (R² = SSR / SST) - 회귀선이 설명하지 못한 부분 SSE 기준으로는 R² = 1 - SSE / SST. - R²이 0.6이면 전체 y의 분산 중 60%는 x로부터 설명된다는 뜻이고, 나머지 40%는 다른 요인이나 노이즈 때문이라는 뜻. cf) R²도 음수가 나온다? - 이 지표는 train data가 회귀선에 얼마나 잘붙었는지 지표이니깐 train data로 계산해야 제대로 나오는데 test data에 대고 계산하면 엉뚱한 값으로 -가 나올수 있다. 회귀분석 결과 해석 (p.45-46) - 목적: 쿠폰을 얼마나 배포하고 가격을 어떻게 책정해야 구매고객 수가 늘어나는지 확인 - 독립변수(쿠폰배포매수와 판매가격)가 종속변수(구매고객수)에 미치는 영향 분석. - 회귀분석 결과 - 회귀식 y = 0.109·x₁ + 0.003·x₂ + 274.375 (x₁은 쿠폰매수, x₂는 판매가격이고 y는 예상 구매고객수) - 쿠폰을 1장 더뿌릴수록 고객 수 0.109명 늘어난다 - 판매가격이 1원 올라가면 고객 수는 0.003명 늘어난다 - 근데 단순히 계수 값만 보고 판단하면 안 되고 그 값이 실제로 통계적으로 의미 있는지를 봐야 한다. - 쿠폰배포매수의 P-값 3.795E-05: 유의미하다 - 판매가격의 P-값은 0.813: 유의하지 않다 즉 가격이 변한다고 해서 구매고객 수가 유의미하게 달라진다고 보기 어렵다. - 판매가격 제거하고 회귀모델을 구성: y = 0.108·x + 282.892 - 조정된 결정계수는 0.735 - 즉 이 회귀모델이 전체 구매고객 수의 약 73.5%를 설명할 수 있다. - (조정: 변수의 개수를 고려해서 모델의 설명력을 평가) - 유의확률 F가 0.000: 회귀모형이 전체적으로 통계적으로 유의하다. - 적어도 하나의 독립변수가 종속변수에 영향을 준다. (실제로 2개 중 1개가 유의했음) cf) F 통계량이 유의히다 = 3개중에 하나라도 유의하다. 모두라는 표현은 아니다. 회귀방정식의 가정 - 등분산성 (p.51) - 등분산성? - x값이 작든 크든 관계없이 y값의 퍼짐 정도 즉 오차의 분산이 항상 일정해야 한다. - 예를 들어 교육수준이 10년인 사람들과 20년인 사람들 모두 소득이 평균을 중심으로 비슷하게 퍼져 있어야 한다. - 오차가 일정하다는 말은 예측이 고르게 잘 맞는다는 뜻이기도한데 회귀선에서 멀리 떨어진 사람도 있고 가까운 사람도 있지만, 그 거리(오차)의 평균적인 크기가 x의 값에 따라 달라지는것만 아니면 된다. - 실제 데이터를 보면 - 교육수준이 낮은 사람들은 대부분 소득이 비슷하게 모여 있다 예를 들어 평균이 500만 원이면 대부분이 450~550만 원 안에 있다. 그런데 교육수준이 높아지면 예를 들어 22년 이상 교육을 받은 사람들의 경우 평균은 800만 원이지만 어떤 사람은 600만 원 벌고 어떤 사람은 1200만 원 넘게 벌기도 하는 등 퍼짐이 훨씬 커진다. - 이건 등분산이 아니라 이분산이고 회귀모델의 중요한 가정을 깨뜨린다. - 이 가정이 깨지면? - 겉으로 보기엔 회귀선이 잘 맞는 것처럼 보여도 실제로는 예측의 신뢰도가 높지 않아진다 즉 평균적인 소득은 맞힐 수 있지만 개별 사람에 대해서는 예측이 크게 틀릴 수 있다. 불편 추정량 (p.53) - 어떤 값을 추정할 때 그 추정값이 평균적으로 진짜 값을 잘 맞히는지를 판단하는 기준. - 모집단의 평균이나 계수를 추정한다고 할 때 표본 데이터를 여러 번 뽑아서 그때마다 계산된 추정값들을 평균 내봤더니 그게 진짜 값과 일치한다면 그 추정량이 "편향이 없다" 즉 불편(unbiased)하다고 한다. - 추정값들이 우연히 왼쪽으로 쏠리거나 오른쪽으로 쏠리지 않고, 중심이 진짜 값을 잘 둘러싸고 있다는 뜻. - ^β2는 변수 X가 Y에 얼마나 영향을 주는지를 나타내는 기울기. - 기대값과 실제값의 차이를 제곱해서 평균내는 방식 즉 분산 공식 그대로 분산을 구한다. - 식을 보면 - 오차항 ei의 분산인 σ2에 영향을 받고 - X의 분산에도 영향을받는다. - n이 커질수록 분산이 작아진다. - 결론적으로 불편 추정량의 의의? - 어떤 계수를 추정할 때 그 값이 정확하냐는 문제를 통계적으로 따질 수 있다. - 정확하다는 건 단순히 한 번의 추정이 맞았다는 뜻이 아니라 여러 번 뽑았을 때 평균적으로 참값 근처에 있다는 것(불편 추정량) - 회귀계수가 불편 추정량이라면 우리는 평균적으로 정확한 값을 얻고 있다. - 들어온중에 젤어려웠던수업.. - oversampling technique 설명들으면서 좋은알고리즘만큼 중요한게 알고리즘을 잘보여주는 예시데이터와 플롯 같다고 생각들었다. ~그런의미에서 내학위심사ppt는 어떡하지?..~ - 자유도 개념이 애매했는데 -1 왜하는지 완전이해할수있어서 좋앗고 등분산성이 헷갈렸는데 위 그림의 예시는 어쨌든 등분산성이 깨진 예시인게 맞겠지? 그러면 제대로 이해했다. - 그리고 불편 추정량을 처음들었는데 개념은 이해했는데 그래서 이게왜나오는건지는 잘모르겠다.#SKALA #데이터분석2025-08-06 ⋯ 데이터 분석 #2 Preprocessing머신러닝 프로세스 (p.25) - test data가 필요한 이유? - hyperparameter tuning을 하면서 validation data는 모델이 이미 참고했다 즉 간접적으로 학습에 영향을 줬기 때문에 모델 학습 과정에서 한번도 보지않은 데이터가 필요함. Box plot (p.38) 그림이 7개 차종에서 연비 플롯이라고 가정 1. 투입됏을때 예측에 긍정적영향을 줄수잇는건? - 납작한애들. 두꺼우면 대표성이 떨어진다. 2. 2번에서 이상치들이 많으니까 잘 처리해야하겠다. 3. 만약 그림같지 않고 y축 높이가 다 비슷비슷했다면? - 이 변수들이 연비를 결정하는데 큰 영향을 못줌. 조건수 (p.52) 조건수(Condition number)? - 어떤 계산 문제에서 입력값이 조금만 바뀌어도 결과가 얼마나 크게 바뀌는지를 나타내는 값 (민감도 개념). 조건수가 큰 경우? - 데이터에 조금의 노이즈나 오차만 있어도 결과가 달라져버려서 예측이나 계산을 할 때 신뢰하기 어려워진다. - 머신러닝에서 여러 개의 입력값(피처)이 있을 때 이 피처들 사이에 스케일 차이가 너무 크거나 비슷한 성향을 가지면 조건수가 커진다. - 예를 들어 Feature 1은 0에서 10 사이 값인데 Feature 2는 1,000에서 100,000 사이 값이라면, 둘을 같은 선형 모델에 넣었을 때 Feature 2의 작은 변화가 모델 결과에 훨씬 큰 영향을 줄 수 있어서 값의 Feature 2 쪽이 모델을 지배하게 됨. - 이를 방지하기 위해 Feature Scaling이 필요하다. Ideation bin counting (p.60) Bin Counting? - 범주형 변수의 값을 단순히 숫자나 벡터로 바꾸는 것이 아니라 그 값이 결과 변수(Target)와 어떤 관련이 있는지를 통계적으로 계산해서 숫자로 바꾸는 방식 - 학생들의 이름이 있고 이 학생들이 시험을 통과했는지(합격/불합격)를 예측하려고 할 때? - 각 학생 이름을 그대로 피쳐로 쓰면(One-hot encoding) 100,000명의 학생 이름마다 새로운 열이 생기고 그러면 데이터가 너무 커지고 희소해져서 계산도 느려지고 모델도 과적합되기 쉬워진다. - Bin Counting은 이름마다 그동안 시험에 합격한 비율을 계산한다. 예를 들어 ‘김민수’라는 이름이 10번 나왔고 그 중 7번은 시험에 합격했다면, ‘김민수’라는 값은 0.7이라는 숫자로 바뀐다. - 이름이라는 범주형 값을 단순히 분리해서 다루는 게 아니라, 그 값이 결과 변수와 얼마나 관련이 있는지를 반영한 숫자로 바꾸는 것. (이름 자체는 중요한 의미를 갖는게 아니니깐) *TFT연구 feature디자인할때 항생제 인코딩 이런식으로 할걸!!!! 이런게잇엇다니#SKALA #데이터분석2025-08-05 ⋯ 데이터 분석 #1 기초통계1. 기술 통계 IQR (p.34) - IQR은? 가운데 50%의 거리. - 그림 설명 - 그림의 2,3: 각각 IQR의 1.5배 선, median 값 선. - 그림의 B: ⚬ 가 많으면 특이값이 많은 것. - 그림의 1,2,3: 1,2는 각각 IQR의 1.5배 선이라고 했는데 3과의 거리가 서로 다른 이유는? 1.5배 안쪽에 데이터들이 다 분포해서. 즉max가 1.5배보다 작아서. 변이 계수(Coefficient of Variables) - 평균치가 다른 집단 비교. - 변이 계수 = 표준편차 / 평균. - 값이 작을수록? 평균 가까이에 분포한다. - 평균 관점에서 퍼짐의 해석 -> 이상치에 민감하다. - IQR은? 중앙값 관점에서 퍼짐의 해석 -> 이상치에 강건하다. 2. 추론 통계 모집단과 표본집단 - 모집단의 모수(parameters): 관심의 대상이 되는 특성. - 표본집단의 통계량(statistics): 표본을 대표하는 값. 확률분포 (이전자료 p.81) 이산형 확률변수 X - 확률질량함수(PMF): f(x)=P[X=x] - 시점(x)의 값이 확률. 연속형 확률변수 X - 확률밀도함수(PDF): ∫(a,b)f(x)=P[a≤X≤b] - 넓이(a~b)가 확률. 확률의 3가지 정의 (p.50) - 확률이란 어떤 일이 일어날 가능성을 숫자로 표현한 것. - 라플라스의 정의 - 동전을 던졌을 때 처럼 가능한 모든 경우가 서로 동등한 기회를 가지고 있다고 보고 사건이 일어나는 경우의 수를 전체 가능한 경우의 수로 나누기. - 예를 들어 동전을 던질 때 앞면이 나올 확률은 두 가지 중 하나니까 1/2. - 빈도주의적 정의 - 동전을 100번 던졌는데 앞면이 18번 나왔다면 앞면이 나올 확률은 0.18이라고 추정하듯이 실험을 여러 번 해보는 방식 - 공리적 정의 - 확률이 어떤 성질을 가져야 하는지(공리)를 정해놓고 그 성질을 만족하는 값을 확률이라고 정의. - 전체 가능한 경우의 집합(표본공간)에 대한 확률은 무조건 1이어야 하고 어떤 사건도 확률이 0보다 작거나 1보다 클 수 없다. 서로 동시에 일어날 수 없는 두 사건이 있을 때 그 둘 중 하나라도 일어날 확률은 각 사건의 확률을 더한 것과 같다(상호배반적). 68-95-99.7의 법칙 (p.59) - 어떤 데이터를 측정하거나 관찰했을 때 그 값들이 평균을 중심으로 어떻게 퍼져 있는지 그 퍼짐 정도(모양?)가 분포이고 - 종 모양의 곡선 형태, 평균을 중심으로 좌우 대칭인 형태이면 정규분포. - 정규분포에서 평균에서 '얼마나' 떨어져 있는지를 나타내는 지표가 표준편차. - 68-95-99.7의 법칙은 평균에서 몇 개의 표준편차 범위 안에 전체 데이터의 몇 퍼센트가 포함되는지를 알려주는 규칙. - 평균에서 ±1 표준편차 범위 내에는 전체 데이터의 약 68%가 들어온다. 예를 들어 평균이 100이고 표준편차가 15인 경우에서 100에서 15를 빼고 더한 값인 85부터 115까지의 범위에 전체 데이터의 68%가 몰려 있다. - ±2 표준편차 범위 안에는 약 95%의 데이터가 포함된다. 평균이 100이고 표준편차가 15이면 70부터 130 사이에 전체 데이터의 95%가 분포하고 있다. - ±3 표준편차 범위에서는 전체 데이터의 99.7%가 들어온다. 평균이 100이고 표준편차가 15인 경우 55부터 145 사이에 전체 데이터의 거의 전부인 99.7%가 존재한다. - Z-Score는 어떤 값이 평균에서 몇 개의 표준편차만큼 떨어져 있는지 수치. - 어떤 데이터가 평균보다 1 표준편차만큼 크면 Z-Score는 +1 - 평균보다 2 표준편차만큼 작으면 Z-Score는 -2 - 정규분포에서 Z-Score가 ±1인 값은 전체의 68%, ±2인 값은 95%, ±3인 값은 99.7%를 포함한다. 불확실성과 표준오차 (p.66) - 동전을 100번 던져서 앞면이 몇 번 나오는지를 보는 실험을 반복하면 매번 정확히 50번씩 앞면이 나오지 않고 어떤 때는 47번 어떤 때는 52번처럼 약간의 오차가 생기는데 - 그 오차가 불확실성, 그 크기를 수학적으로 표현한 것이 표준편차. - 한 번의 시행에서 앞면이 나올 확률이 0.5이고, 그것의 표준편차가 0.5라고 했을 때, 100번을 시행하면 표준오차도 0.5에 100을 곱한 50이 될까? 시행횟수에 비례해서 오차의 크기도 똑같이 늘어날까? - 여러 번 시행하면 평균값에 더 가까워지는 경향이 있기 때문에 시행 횟수가 많아질수록 오차는 작아진다. - 표준오차는 단순히 표준편차에 시행 횟수를 곱하는 것이 아니라, 표준편차를 루트 시행 횟수로 나눈 값으로 변한다. (제곱근의 법칙) 제곱근의 법칙 (p.67) 표본의 수가 많아지면 평균은 더 정확해지나? - 표본이 많아질수록 그 평균은 실제 전체 집단의 평균 즉 모평균에 가까워진다 - 얼마나 가까워졌는지 알려면 뭔가 수치로 표현할 수 있어야하는데 그게 '표준오차(Standard Error, SE)'이다. - 모집단의 표준편차를 알고 있다면 표준오차 SE는 = σ/√n - 모집단의 정보를 모른다면 표본의 표준편차 s를 대신 써서 SE = s/√n - 보면 표본의 수가 많아질수록 분모에 있는 n이 커지니까 전체 SE 값은 작아지고 평균이 모평균에 더 가까워진다 표본의 수가 늘어나면, 표준오차는 얼마나 줄어들까? - '제곱근 √n'에 반비례해서 줄어든다 - 표본의 수가 1일 때는 √1 = 1, 표본 수가 4면 √4 = 2, 9면 √9 = 3, 16이면 √16 = 4처럼 증가. 그래서 표본의 수가 4배여야 표준오차는 절반으로 줄어든다. - 그래서 우리가 어떤 평균을 구할 때 표본이 많으면 더 정밀해지는 건 맞지만 그 정밀도는 점점 천천히 좋아짐 마치 10명으로 평균을 구할 때보다 100명으로 구할 때 더 정확해지긴 하는데 그 차이가 그렇게 크진 않은데 왜냐하면 √10은 약 3.16이고, √100은 10이라서 약 3배 차이만 나니까. 68-95-99.7 법칙 - 표준편차가 5인 경우 평균 ± 1σ(표준편차)인 구간, 즉 45-55에는 약 68%의 확률로 데이터가 들어오고, 평균 ± 2σ인 40-60에는 약 95%의 확률로 들어온다는 규칙 - 어떤 동전 던지기 실험을 100번 반복했더니 평균이 50이고 표준오차가 5였다면? - 표본 평균이 40에서 60 사이에 있을 확률이 약 95%. (95% 신뢰구간) - 나는 평균이 50이라고 믿는데 95% 확률로 진짜 평균은 40~60 사이에 있을 거라고 신뢰가능한구간 - 표본의 크기가 커지면 신뢰구간은 어떻게 될까? - 표본이 커지면 표준오차가 줄어들고 신뢰구간도 좁아진다. 즉 우리가 더 많은 데이터를 가지고 있다면 진짜 평균을 더 좁은 범위로 정확히 예측할 수 있다. 중심극한정리 (p.71) - 동전을 한 번 던지면 앞면이 나오거나 뒷면이 나오고 확률이 50%씩이다. - <실험1> 동전을 5번 던지면 - 앞면이 5번 중 2번일 수도 있고, 4번일 수도 있고, 완전히 랜덤처럼 보이고 히스토그램으로 그려보면 이상한 모양이 나오는데 표본수가 적어서그렇다. - 동전을 500번 던지고 히스토그램으로 그려보면 가운데 몰린 종 모양이 된다. - <실험2> "동전을 5번 던지고, 앞면이 몇 번 나왔는지를 기록"을 한번 하는게아니라 수백 번 반복하고 - 마찬가지로 "10번 던지고 기록", "100번 던지고 기록", "500번 던지고 기록"을 히스토그램으로 그리면 횟수가 많아질수록 분포가 가운데 몰린 정규분포 형태가된다. (중심극한정리) - 중심극한정리 - 어떤 분포에서 나오는 데이터든지 그 평균값들을 계속해서 모으면, 그 평균들의 분포는 (처음 데이터 자체가 정규분포가 아니더라도) 정규분포를 따른다. - 유의점 - <실험2>에서 500번 던지고 기록한다는건 히스토그램에서 막대가 500개라는게 아니라 500개의 평균을 N번 그려서 막대는 N개이고 엄밀히는 "500번 던지고 N번 기록한다"이다. - <실험1>에서 500번 던진 히스토그램이 종 모양이되는건 중심극한정리를 보여주는게 아니라 이항분포의특성을 보여준다. (p.75-76) 1이 나온 횟수의 분포 - 주사위를 10번 던지면 1이 나올 수 있는 횟수 분포는 불규칙하고 히스토그램도 불규칙함. - 주사위 던지기를 600번씩 반복해서 그때마다 '1이 나온 횟수'를 기록하고 그 결과를 모아 히스토그램을 그리면? - 분포는 점점 종 모양 정규분포에 가까워진다. - 평균(x축의)은 대략 전체 횟수의 1/6인 100 근처가 된다.(주사위의 한 면이 나올 확률이 1/6) 여론조사 - 여론조사에서 1,000명에게 물었더니 63%가 어떤 후보를 지지한다고 나왔다고 해보자. 다음에 또 1,000명을 조사하면 정확히 63%가 나올까? - <질문1> 재조사 시 동일한 결과는 보장하지 못하지만, 구간을 잡으면 신뢰할 수 있지 않을까? - 다음 조사에서 63%를 보장하지 못하지만 표준오차와 중심극한정리를 바탕으로 구간은 찾을수있다. 95% 신뢰수준이라면 “우리가 100번 이런 조사를 반복했을 때 95번은 진짜 값이 이 구간 안에 들어간다”고 말할 수 있다. - <질문2> 샘플링 불확실성(uncertainty)을 수량화 즉 불확실성의 정량화? - 뽑은 표본은 항상 약간씩 다르고 오차가 존재하지만 그 오차가 얼마나 될지를 수식으로 계산해서 수량화할 수 있고 그게 불확실성의 정량적 추론. - <질문3> 어떻게 구간을 잡을것인가? - 표본 비율 ± (임계값 × 표준오차) - 95% 신뢰구간을 구하고 싶다면? (z = 1.96 / p = 0.63, n = 1000일때) - SE = √(p(1-p)/n) = √(0.63 × 0.37 / 1000) ≈ 0.0153 - 신뢰구간 = 0.63 ± 1.96 × 0.0153 ≈ (0.600, 0.660) - 진짜 지지율은 약 60.0% ~ 66.0% 사이일 것이다. - <질문4> 95% 신뢰구간의 의미는? - 이 사람의 지지율이 95% 확률로 이 구간 안에 있다 (x) - 이런 방식으로 표본을 100번 추출해서 구간을 만들면 그 중 약 95번은 진짜 값(모비율)을 포함할 것이다. (표본이 아니라 추정 방법에 대한 신뢰) 유의수준 (p.87) - 유의수준? - 내가 어느 정도 위험을 감수하고 기각할지를 정하는 수치. - α = 0.05 면 5% 정도는 내가 틀릴 수도 있다는 걸 감안하고 귀무가설을 기각하겠다 즉 실제로는 귀무가설이 맞는데도 5% 확률로 잘못 기각할 수 있다는 걸 받아들이겠다. - α = 0.01로 정했다면? 나는 실수할 확률을 1% 이하로 줄이겠다. - 유의수준 & 신뢰도 - α = 0.05는 95% 신뢰도. (95% 확률로 맞을것이다 x 95% 확률로 이 방법을 믿는다 o) - α = 0.01이면 99% 신뢰도 / α = 0.1이면 90% 신뢰도. - 유의수준 & Z-값 - Z-값: 정규분포에서 얼마나 극단적인 값이 나와야 기각할지를 결정하는 경계값 - α = 0.1 → Z ≈ 1.645 - α = 0.05 → Z ≈ 1.96 - α = 0.01 → Z ≈ 2.575 - 유의수준 α가 작아질수록 더 멀리 떨어진 극단적인 데이터가 나와야 귀무가설을 기각할 수 있다. 중심극한정리는 모든 분포에 다 유효한가? 그러면 분포가 없는 경우에도 유효한가? - 중심극한정리가 적용되기 위해선 표본들이 서로 독립적으로 추출 / 각 표본은 같은 분포 / 모집단의 유한한 평균과 분산 / 표본의 크기가 충분히 클 것 (n ≥ 30) - 모집단의 분포가 존재하지 않거나, 분포는 있지만 기댓값이나 분산이 무한하다면, 중심극한정리는 성립하지 않음. - Cauchy 분포: 평균, 분산이 정의되지 않아서 중심극한정리 성립 안 함 - 무한 분산을 가진 분포 (heavy-tailed distributions) 적용 불가 모집단에 분포가 존재한다의 의미? - 기댓값(평균)과 분산 같은 통계량을 계산할 수 있다. 평균이랑 분산을 계산못할수도있나? - 평균이 너무 자주 바뀌면 분산이 무한할수있다(=계산할수없다). - 예시: 가상의 시험에서 대부분 학생은 80~90점 사이인데 한번씩 누가 10만 점, 1억 점을 받는다. 말도 안 되게 큰 점수가 자주 나오면 평균을 구할 수는 있더라도 평균이 계속 바뀌고 평균 근처에서 얼마나 퍼져 있는지를 따지는 분산도 엄청 커져서 계산이 불가해진다. 결론 중심극한정리는 "대부분 학생은 80~90점 사이인데 한번씩 누가 10만 점, 1억 점을 받는다" 같은 상황이나 Cauchy 분포만 아니면 모두 적용된다? (왜냐면 기댓값과 분산은 데이터만 있으면 무조건 계산 가능하므로 언급한 케이스가 아니면 모집단의 분포가 없기는 어려움)#SKALA #데이터분석← →