본문 바로가기
STUDY

[멋쟁이사자처럼부트캠프_그로스마케팅] Day22 머신러닝 기초, 로지스틱 회귀 실습

by vol2 2025. 3. 7.

 

 

 

     

     

     

    1 머신러닝

    1. 머신러닝의 정의

    머신러닝은 데이터에서 패턴을 학습하여 새로운 데이터에 대한 예측을 수행하는 인공지능(AI) 기술이다.

    전통적인 프로그래밍 방식과는 달리 명시적인 규칙을 프로그래머가 지정하는 것이 아니라 (틀만 줌), 알고리즘이 데이터를 분석하여 스스로 규칙을 찾아내는 방식으로 동작한다.

    2. 머신러닝의 주요 학습 유형 (지도 vs. 비지도)

    1) 지도 학습(Supervised Learning)

    • 정의: 입력 데이터(특징, Feature)와 이에 대응하는 정답(레이블, Label)이 주어진 상태에서 학습하는 방식
    • 목표: 주어진 데이터를 기반으로 입력과 출력 간의 관계를 학습하여, 새로운 입력값에 대해 올바른 출력을 예측하는 것
    • 대표 알고리즘
      • 선형 회귀(Linear Regression)
      • 로지스틱 회귀(Logistic Regression)
      • 의사결정나무(Decision Tree)
      • 랜덤 포레스트(Random Forest)
      • 서포트 벡터 머신(SVM)
      • 신경망(Neural Networks)

    2) 비지도 학습(Unsupervised Learning)

    • 정의: 정답(레이블)이 없는 데이터에서 패턴을 찾는 방식
    • 목표: 데이터의 구조 이해 및 군집화, 차원 축소, 특징을 요약하는 것
    • 대표 알고리즘
      • 군집화(Clustering): K-평균(K-Means), DBSCAN, 계층적 군집화
      • 차원 축소(Dimensionality Reduction): PCA(주성분 분석), t-SNE, UMAP

    3) 강화 학습(Reinforcement Learning)

    • 정의: 에이전트(Agent)가 환경(Environment)과 상호작용하면서 보상(Reward)을 최대화하는 방식으로 학습하는 방법
    • 목표: 최적의 행동(Policy)을 학습하여 주어진 환경에서 높은 보상을 받도록 하는 것
    • 예제
      • 게임 플레이 AI(알파고, DQN)
      • 자율주행 차량의 최적 경로 찾기, 배차 알고리즘
    • 대표 알고리즘
      • Q-러닝(Q-Learning)
      • 심층 강화 학습(Deep Q-Network, DQN)
      • 정책 기반 학습(Policy Gradient)

     

    3. 머신러닝의 주요 개념

    1) 데이터셋 (Dataset)

    머신러닝 모델을 학습시키기 위해 필요한 데이터의 모음입니다. 일반적으로 다음과 같이 구성됩니다.

    • 훈련 데이터(Training Data): 모델을 학습시키기 위한 데이터
    • 검증 데이터(Validation Data): 학습 과정에서 모델의 성능을 평가하는 데이터 (Y, 실제값들, 검증은 빼고 할때도 있음)
    • 테스트 데이터(Test Data): 학습이 끝난 후 모델의 최종 성능을 평가하는 데이터 (모델만들고 나서 사용하는 Y)

    2) 특징(Feature)과 라벨(Label)

    • 특징(Feature): 입력 데이터의 속성을 나타내는 변수(예: 키, 몸무게, 연령) (독립변수)
    • 레이블(Label): 예측해야 하는 값(예: 암 진단 여부, 집값) (종속변수)

    3) 과적합(Overfitting)과 과소적합(Underfitting)

    • 과적합(Overfitting): 학습 데이터에는 잘 맞지만 새로운 데이터에는 성능이 떨어지는 현상
    • 과소적합(Underfitting): 모델이 데이터의 패턴을 충분히 학습하지 못한 경우
    • 해결 방법:
      • 과적합 방지: 정규화(Regularization), Dropout, 데이터 증강(Data Augmentation)
      • 과소적합 해결: 모델 복잡도 증가, 데이터 추가

    4) 손실 함수(Loss Function)와 최적화(Optimization)

    1. 손실 함수(Loss Function):  모델이 예측한 값과 실제 값 간의 차이를 측정하는 함수 .손실 함수는 모델이 예측을 얼마나 잘했는지를 수치화하여 나타내며, 모델 학습 과정에서 이 값을 최소화하려고 노력합니다.
      • 손실 함수의 개념
        • 목적: 손실 함수는 예측 값과 실제 값 사이의 오차를 측정합니다. 이 오차를 최소화하는 방향으로 모델의 파라미터를 업데이트하여 학습을 진행합니다.
        • 역할: 손실 함수의 출력 값이 작을수록 모델의 예측이 정확하다는 것을 의미합니다. 반대로, 손실 값이 크다면 모델의 예측이 부정확하다는 것을 나타냅니다.

    • 대표적인 손실 함수
      • 평균 제곱 오차 (Mean Squared Error, MSE)
        • 정의: MSE는 회귀 문제에서 자주 사용되는 손실 함수로, 예측 값과 실제 값 간의 차이를 제곱하여 평균한 값입니다.
        • 수식:
        여기서 $y_i$는 실제 값, $\hat{y}_i$는 모델의 예측 값, $n$은 데이터 포인트의 수입니다.

    • 특징: 오차의 제곱을 사용하기 때문에 큰 오차에 대해 더 큰 페널티를 부여합니다.

     

    • 로지스틱 손실 (Logistic Loss, Cross-Entropy Loss)
      • 정의: 이진 분류 문제에서 자주 사용되는 손실 함수로, 모델의 예측 확률과 실제 라벨 간의 차이를 측정합니다.
      • 수식:

    여기서 $y_i$는 실제 라벨 (0 또는 1), $\hat{y}_i$는 예측 확률입니다.

    • 특징: 확률 예측에서 잘못된 예측에 대한 페널티를 부여합니다.

     

    • 절대 오차 (Mean Absolute Error, MAE)
      • 정의: MAE는 예측 값과 실제 값의 차이의 절대값을 평균한 값입니다.
      • 수식:

    • 특징: 오차의 크기에 관계없이 일정한 페널티를 부여하며, MSE보다 이상치에 덜 민감합니다.
    • MSE 수식을 전개하면 아래와 같은 2차식이 나오며 2차 함수를 그래프로 표현하면 아래와 같습니다.

    MSE에서 제일 오목한 곳이 optimal point f(세타) = 기울기가 주어졌을때 이 최소값을 찾고자 함. 기울기가 0이 될때까지 하는 것

     


    2. 최적화(Optimization)
    : 손실 함수를 최소화하기 위해 모델의 파라미터를 조정하는 과정입니다. 흔히 사용하는 최적화 방법으로는 경사 하강법(Gradient Descent)이 있습니다.

     

    - 경사 하강법 (Gradient Descent)

    경사 하강법은 함수의 최소값을 찾기 위한 최적화 알고리즘입니다. 주로 머신러닝에서 손실 함수의 최소값을 찾아 모델의 파라미터를 최적화하는 데 사용됩니다. 경사 하강법은 반복적으로 함수의 기울기(경사)를 계산하고, 그 기울기의 반대 방향으로 이동하면서 함수 값을 점차 감소시킵니다.


    4. 머신러닝의 주요 알고리즘

    1) 지도학습 알고리즘

    • 회귀(Regression): 연속적인 값 예측 (예: 집값 예측)
      • 선형 회귀(Linear Regression), 다항 회귀(Polynomial Regression)
    • 분류(Classification): 입력 데이터를 특정 클래스(범주)로 분류 (예: 스팸 메일 필터링)
      • 로지스틱 회귀, 결정 트리, 랜덤 포레스트, SVM, 신경망

    2) 비지도학습 알고리즘

    • 군집화(Clustering): 유사한 데이터를 그룹으로 묶음 (예: 고객 세분화)
      • K-평균 군집화(K-Means), DBSCAN
    • 차원 축소(Dimensionality Reduction): 고차원 데이터를 더 적은 차원으로 변환
      • PCA(주성분 분석), t-SNE

    3) 강화학습 알고리즘

    • Q-러닝(Q-Learning): 보상 기반 최적 행동 학습
    • 심층 강화 학습(Deep Q-Network, DQN): 딥러닝을 활용한 강화학습

    5. 머신러닝 모델 평가 방법

    머신러닝 모델이 얼마나 잘 동작하는지 평가하기 위해 다양한 지표를 사용합니다.

    1) 회귀 평가 지표

    • 평균 제곱 오차(MSE): 예측값과 실제값 간의 차이의 제곱 평균
    • 평균 절대 오차(MAE): 예측값과 실제값 간의 절대값 차이 평균
    • R²(결정 계수): 모델이 데이터를 얼마나 잘 설명하는지 나타내는 지표,
    • 0~1로 나타나서 보기 좋아서 이거만 주로 씀, 회귀모델은 모델이 잘 작동하는지만 보면되어서 평가지표 Rsquare만 씀

    2) 분류 평가 지표

    • 정확도(Accuracy): 전체 데이터 중 올바르게 분류된 비율 (정밀도, 재현율에서 정확도를 도출)
    • 정밀도(Precision): 모델이 양성으로 예측한 데이터 중 실제 양성 비율
    • 재현율(Recall): 실제 양성 데이터 중 모델이 양성으로 예측한 비율
    • F1-Score: 정밀도와 재현율의 조화 평균

    6. 머신러닝 학습을 위한 필수 도구 및 라이브러리

    • Python: 머신러닝에 가장 많이 사용되는 언어
    • NumPy, pandas: 데이터 전처리 및 분석
    • scikit-learn: 다양한 머신러닝 알고리즘 제공
    • TensorFlow(구글 머신러닝 프레임워크, Keras 딥러닝 API ), PyTorch: 딥러닝 프레임워크

    7. 머신러닝 학습 과정 요약

    1. 문제 정의 및 목표 설정  *제일 중요
    2. 데이터 수집 및 정제
    3. 데이터 탐색 및 시각화
    4. 특징 선택 및 엔지니어링
    5. 모델 선택 및 학습
    6. 모델 평가 및 개선
    7. 모델 배포 및 활용

     

    2 규칙기반과 학습기반 인공지능

    1. 규칙기반 인공지능 (Rule-Based AI)

    규칙기반 AI는 특정 문제를 해결하기 위해 사람이 미리 정의한 규칙을 사용하여 동작합니다.

    규칙은 "만약 이 조건이 참이면, 이 작업을 수행하라"와 같은 형식으로 정의됩니다.

    이 시스템은 일반적으로 결정 트리(Decision Trees)나 상태 머신(State Machines) 형태로 구현됩니다.

     

    간단한 스팸 이메일 필터 예제:

    특정 키워드가 포함된 이메일을 스팸으로 분류하는 규칙을 정의합니다.

    def is_spam(email_text):
        spam_keywords = ["지금 구매", "한정 판매", "무료", "당첨", "여기를 클릭하세요"]
        for keyword in spam_keywords:
            if keyword.lower() in email_text.lower():
                return True
        return False
    
    # 테스트
    email1 = "축하합니다! 무료로 휴가에 당첨되셨습니다. 여기를 클릭하세요."
    email2 = "안녕하세요, 지난주 회의에 대해 다시 연락드리고 싶었습니다."
    
    print(f"이메일 1은 스팸입니까?: {is_spam(email1)}")  # True
    print(f"이메일 2는 스팸입니까?: {is_spam(email2)}")  # False
    
    • spam_keywords 목록에 정의된 키워드들이 이메일 내용에 포함되어 있는지를 검사합니다.
    • 키워드가 발견되면 해당 이메일을 스팸으로 분류합니다.
    • 간단하고 명료하지만, 새로운 스팸 패턴이 등장하면 규칙을 수동으로 업데이트해야함.

     

    2. 학습기반 인공지능 (Learning-Based AI)

    학습기반 AI는 데이터를 통해 학습하여 스스로 규칙을 생성하고 예측을 수행합니다.

    머신러닝 모델이 데이터를 분석하고 패턴을 학습한 후, 새로운 데이터에 대한 결정을 내리도록 합니다.

    - 대표적인 학습기반 분류 알고리즘 → 나이브 베이즈, 로지스틱 회귀

     

    간단한 스팸 메일 필터 (학습기반): 머신러닝을 사용하여 스팸 이메일 분류

    scikit-learn 라이브러리를 사용하여 나이브 베이즈 분류기(Naive Bayes Classifier)를 구현합니다.

     

    • CountVectorizer → 텍스트 데이터를 숫자(단어 빈도 벡터)로 변환
    • MultinomialNB(나이브 베이즈 분류기) → 확률 기반 스팸 필터링 알고리즘
    • train_test_split → 데이터를 학습용(80%)과 테스트용(20%)으로 나눠 모델 평가
    • accuracy_score → 모델의 예측 정확도를 측정
    • predict() → 새로운 데이터(이메일)가 스팸인지 예측

     

    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    # 샘플 데이터 (이메일 본문)
    emails = [
        "지금 가입하면 첫 달 무료! 여기를 클릭하세요.",  # 스팸 가능성 높음
        "회의 자료를 첨부했습니다. 검토 부탁드립니다.",  # 정상 이메일
        "특별 할인 행사 중! 지금 바로 쇼핑하고 30% 할인 받으세요.",  # 스팸 가능성 높음
        "안녕하세요, 오늘 오후 회의 시간 확인 부탁드립니다.",  # 정상 이메일
        "당첨되셨습니다! 상품 수령을 위해 여기를 클릭하세요.",  # 스팸 가능성 높음
        "신규 프로젝트 투자 기회를 놓치지 마세요."  # 스팸 가능성 높음
    ]
    
    # 각 이메일이 스팸(1)인지 정상(0)인지 라벨링 (정답 데이터)
    labels = [1, 0, 1, 0, 1, 1]  # 1: 스팸, 0: 정상 이메일
    
    # 데이터 전처리
    # NLP에서는 보통 원-핫 인코딩이나 BERT 등의 임베딩 기법을 쓰지만, 
    # 여기서는 간단한 방법(Bag-of-Words)으로 CountVectorizer를 사용하여 텍스트를 숫자로 변환.
    vectorizer = CountVectorizer()  
    X = vectorizer.fit_transform(emails)  # 각 이메일을 단어 빈도수 벡터로 변환 (독립변수 X)
    
    # 학습 데이터(X_train, y_train)와 테스트 데이터(X_test, y_test)로 분할 (80% 학습, 20% 테스트)
    # random_state=42를 설정하면 같은 결과를 재현 가능
    X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
    
    # 모델 학습
    # MultinomialNB(다항 나이브 베이즈)는 텍스트 분류에 적합한 확률 기반 머신러닝 모델
    model = MultinomialNB()
    model.fit(X_train, y_train)  # 학습 데이터(X_train, y_train)로 모델 학습 진행
    
    # 테스트 데이터로 예측 수행
    y_pred = model.predict(X_test)  # X_test에 대한 스팸/정상 예측값 생성
    
    # 모델의 정확도 평가
    accuracy = accuracy_score(y_test, y_pred)  # 실제값(y_test)과 예측값(y_pred) 비교하여 정확도 계산
    print(f"정확도: {accuracy * 100:.2f}%")  # 모델이 얼마나 잘 예측하는지 출력 (예: 100%라면 완벽한 예측)
    
    # 새로운 이메일이 스팸인지 예측
    new_email = ["이 기회를 놓치지 마세요! 특별 혜택이 기다리고 있습니다."]  # 새로운 이메일 샘플
    new_email_transformed = vectorizer.transform(new_email)  # 기존 모델이 이해할 수 있도록 단어 벡터 변환
    prediction = model.predict(new_email_transformed)[0]  # 예측값(0: 정상, 1: 스팸) 반환
    
    # 예측 결과 출력
    print(f"새 이메일이 스팸입니까?: {'예' if prediction == 1 else '아니오'}")  # 예측 결과 해석 후 출력
    • 데이터 전처리: CountVectorizer를 사용하여 텍스트 데이터를 수치로 변환합니다.
    • 모델 학습: MultinomialNB 모델을 사용하여 데이터를 학습시킵니다. 나이브 베이즈는 텍스트 분류 작업에 자주 사용되는 모델입니다.
    • 예측 및 평가: 테스트 데이터를 사용하여 모델의 성능을 평가하고, 새로운 이메일이 스팸인지 예측합니다.
    • 데이터를 통해 패턴을 학습하기 때문에, 새로운 유형의 스팸이 등장해도 학습 데이터에 기반하여 대응할 수 있습니다.



    3. 규칙기반과 학습기반의 비교

    특징  규칙기반 시스템  학습기반 시스템
    규칙 생성 사람이 수동으로 규칙 정의 데이터로부터 자동 학습
    유연성 낮음, 새로운 상황에 대한 대응이 어렵습니다 높음, 새로운 데이터에 따라 학습 가능
    설명 가능성 명확한 규칙으로 설명 가능 학습한 규칙이 복잡하여 설명이 어려울 수 있음
    적용 사례 명확한 규칙이 있는 문제 데이터가 충분하고 패턴이 복잡한 문제

     

    4. 혼합 시스템 (Hybrid Systems)

    규칙기반과 학습기반 시스템의 장점을 결합한 혼합 시스템도 존재합니다. 예를 들어, 학습기반 시스템에서 기본적으로 규칙기반 접근을 사용하고, 예외적인 상황에서 학습기반 시스템의 결정을 보완하거나 수정할 수 있습니다.

    이러한 혼합 접근 방식은 일반적으로 복잡한 문제를 해결하거나 높은 신뢰성과 유연성이 필요한 경우에 사용됩니다.

     

     


     

    3 로지스틱 회귀 분석 실습 (머신러닝 분류 실습 & Flask 사용해서 웹 발행)

    새로운 소비 집단에 대해 그로스마케팅 성과지표를 이용해 분류하세요.

     

    시나리오:

    새로운 BI툴 서비스인 '루커스튜디오'에는 일반 서비스, Pro 서비스가 있다.

    Pro 서비스의 구독율이 저조하여, 해결책으로 Pro 구독 고객 중 특정 조건인 고객에게 VIP 등급을 부여하여 업데이트되는 신기술을 가장 먼저 사용할 수 있도록 하고, 용량도 무제한으로 제공하고자한다.

    • 분류: Pro 구독 고객, VIP 고객,일반 고객
    • 분류 조건: VIP: Pro 구독 고객 중 Pro 구독 기간이 3개월 이상 or 구매 금액이 5000원 이상 or 지인에게 서비스를 공유하여 가입한 친구 수가 5인 이상 #"지인 추천 수", "구매 금액", "구매 유지 기간", "Pro 가입여부", "환불 횟수" 고객 데이터를 통해 "고객 세그먼트”를 로지스틱 회귀 모델을 통해 분류해보자.

    기대효과: Pro 구독 유지율 증가 및 일반 고객에게 Pro 구독을 유도

    코드 작성한 후,

     

    Flask 사용해서 웹 발행까지 했다. 웹에서 데이터를 넣으면 고객 분류가 자동으로 되는게 신기했다.

    근데 정확도가 좀 떨어져서 데이터를 더 추가해야 쓸만할 것 같다.


    나이브 베이즈(Naïve Bayes)와 로지스틱 회귀(Logistic Regression)의 관계

    둘 다 머신러닝의 "분류" 알고리즘이며, 학습기반 알고리즘에 해당한다. 하지만 접근 방식이 다름.

    구분 나이브 베이즈 (Naïve Bayes) 로지스틱 회귀 (Logistic Regression)
    알고리즘 유형 확률 기반 분류기 선형 모델 기반 분류기
    이론적 배경 베이즈 정리 (조건부 확률) 로지스틱 함수(시그모이드 함수)
    가정(Assumption) 특징(Feature) 간 독립성을 가정 특징 간 관계를 고려 가능
    출력값 각 클래스(예: 스팸 vs. 정상)일 확률을 계산 후 가장 높은 확률 선택 특정 클래스일 확률을 계산 후 0.5 이상이면 1, 미만이면 0
    속도 빠름 (단순한 확률 계산) 상대적으로 느림 (최적화 과정 필요)
    데이터 요구량 적은 데이터에서도 잘 작동 데이터가 많을수록 성능 향상
    적용 예시 텍스트 분류 (스팸 필터, 감성 분석) 의료 데이터 분류, 마케팅 고객 예측
    단점 독립성 가정이 현실에서 잘 맞지 않음 이상치(Outlier)에 민감할 수 있음

     

    공통점

    • 둘 다 이진 분류(Binary Classification)에서 사용되는 학습기반 머신러닝 알고리즘
    • 확률을 기반으로 결과를 예측하는 방식
    • 입력 데이터를 사용하여 새로운 데이터를 자동으로 분류

    핵심 차이점

    • 나이브 베이즈 → 확률 기반 모델, 독립성 가정(각 특징이 서로 영향을 주지 않는다고 가정)
    • 로지스틱 회귀 → 선형 모델, 특징 간 관계 고려 가능 (특징이 서로 영향을 주더라도 학습 가능)

     


    회고

    머신러닝 기초를 배웠는데 개념은 알겠다만 함수 나오면 집중력이 흐려지게 된다... 

    계속 같은 내용 나온다고 하니까 믿고 따라가는걸로ㅎㅎ

    모델은 할때마다 신기할따름이다 우리가 쓰는 서비스도 이런 느낌으로 만들어지는 거겠지.

    전 이번주에 못 끝낸 보고서 마무리하러 가겠습니다.

    주말 즐겁게 보내세요! 🤣