오늘은 머신러닝 기본 개념에 대해 배우고
머신러닝 템플릿(로지스틱 회귀)을 이용하여 웹 게시를 했다.
아직 로지스틱 회귀에 대해 잘 모르지만 분류할 때 사용되는 것으로 보였다.
그리고 웹으로 내보내는 작업을 많이 하는 이유는 시각적으로 보기 편하기 때문이라고 하셨다.
웹개발에 대해 더 안다면 다양한 디자인으로 수정도 가능할 것으로 보인다.
학습목표
- 머신러닝 개념
- 로지스틱 회귀 템플릿을 사용하여 웹 서비스 생성
머신러닝 개념
1. 머신러닝의 주요 학습 유형
1) 지도 학습(Supervised Learning), 교사학습
- 정의: 입력 데이터(특징, Feature)와 이에 대응하는 정답(레이블, Label)이 주어진 상태에서 학습하는 방식
- 목표: 주어진 데이터를 기반으로 입력과 출력 간의 관계를 학습하여, 새로운 입력값에 대해 올바른 출력을 예측하는 것
- 예제
- 이메일이 스팸인지 아닌지를 분류하는 모델
- 주어진 집의 특성을 보고 가격을 예측하는 모델
- 대표 알고리즘
- 선형 회귀(Linear Regression)
- 로지스틱 회귀(Logistic Regression)
- 의사결정나무(Decision Tree)
- 랜덤 포레스트(Random Forest)
- 서포트 벡터 머신(SVM)
- 신경망(Neural Networks)
2) 비지도 학습(Unsupervised Learning), 비교사학습
- 정의: 정답(레이블)이 없는 데이터에서 패턴을 찾는 방식
- 목표: 데이터의 구조를 이해하고 그룹을 발견하거나 특징을 요약하는 것
- 예제
- 고객을 유사한 그룹으로 묶는 고객 세분화(Clustering)
- 문서를 주요 주제로 분류하는 토픽 모델링(Topic Modeling)
- 대표 알고리즘
- 군집화(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): 학습 과정에서 모델의 성능을 평가하는 데이터
- 테스트 데이터(Test Data): 학습이 끝난 후 모델의 최종 성능을 평가하는 데이터
2) 특징(Feature)과 라벨(Label)
- 특징(Feature): 입력 데이터의 속성을 나타내는 변수(예: 키, 몸무게, 연령) > x에 해당한다.
- 레이블(Label): 예측해야 하는 값(예: 암 진단 여부, 집값) > y에 해당한다.
3) 과적합(Overfitting)과 과소적합(Underfitting)
- 과적합(Overfitting): 학습 데이터에는 잘 맞지만 새로운 데이터에는 성능이 떨어지는 현상
- 과소적합(Underfitting): 모델이 데이터의 패턴을 충분히 학습하지 못한 경우
- 해결 방법:
- 과적합 방지: 정규화(Regularization), Dropout, 데이터 증강(Data Augmentation)
- 과소적합 해결: 모델 복잡도 증가, 데이터 추가
4) 손실 함수(Loss Function)와 최적화(Optimization)
- 손실 함수: 모델이 예측한 값과 실제 값 간의 차이를 측정하는 함수
- 최적화 기법: 손실을 최소화하도록 모델을 개선하는 방법 (예: 경사 하강법)
4. 머신러닝의 주요 알고리즘
1) 회귀(Regression) - 통계 회귀 분석에서 많이 다뤄서 오늘은 지나감
- 연속적인 값을 예측하는 문제 (예: 주택 가격 예측)
- 대표 알고리즘: 선형 회귀(Linear Regression), 다항 회귀(Polynomial Regression)
2) 분류(Classification) - 규칙기반(과거 사용), 학습기반(나이브 베이즈, 로지스틱 회귀 )
- 카테고리 값을 예측하는 문제 (예: 이메일 스팸 분류)
- 대표 알고리즘: 로지스틱 회귀, 결정 트리, 랜덤 포레스트, SVM
3) 군집화(Clustering)
- 유사한 데이터를 그룹으로 묶는 문제 (예: 고객 세분화)
- 대표 알고리즘: K-평균, DBSCAN
5. 머신러닝 모델 평가 방법
머신러닝 모델이 얼마나 잘 동작하는지 평가하기 위해 다양한 지표를 사용합니다.
1) 회귀 평가 지표
- 평균 제곱 오차(MSE): 예측값과 실제값 간의 차이의 제곱 평균
- 평균 절대 오차(MAE): 예측값과 실제값 간의 절대값 차이 평균
- R²(결정 계수): 모델이 데이터를 얼마나 잘 설명하는지 나타내는 지표 (주로 사용됨)
2) 분류 평가 지표
- 정확도(Accuracy): 전체 데이터 중 올바르게 분류된 비율 (주로 사용됨)
- 정밀도(Precision): 모델이 양성으로 예측한 데이터 중 실제 양성 비율
- 재현율(Recall): 실제 양성 데이터 중 모델이 양성으로 예측한 비율
- F1-Score: 정밀도와 재현율의 조화 평균
6. 머신러닝의 응용 분야
머신러닝은 다양한 산업과 실생활에서 활용됩니다.
1) 자연어 처리(NLP)
- 감성 분석, 챗봇, 기계 번역
2) 컴퓨터 비전
- 얼굴 인식, 자율주행, 객체 탐지
3) 추천 시스템
- 영화 추천, 제품 추천
4) 금융 및 헬스케어
- 사기 탐지, 암 진단
7. 머신러닝 학습을 위한 필수 도구 및 라이브러리
- Python: 머신러닝에 가장 많이 사용되는 언어
- NumPy, pandas: 데이터 전처리 및 분석
- scikit-learn: 다양한 머신러닝 알고리즘 제공
- TensorFlow, PyTorch: 딥러닝 프레임워크(앞으로 많이 다룰 예정 머신러닝 파트니깐.)
함수가 모인것을 라이브러리라고 한다.
라이브러리가 모인 것을 프레임 워크라고 한다.
그리고 오늘 수업을 들으면서 이해한 내용과 실습내용
교사학습 기본 개념(머신러닝과 딥러닝 차이점)


y(라벨)= xw( w, y는 알려줘야한다. 교사학습)
w = 모델, 패턴, 특징 ( 팬더스 수업에서 이런 것들은 컬럼이라고 했다. 잘못 적은 건지... 원래는 x였던 거 같은데... w는 가중치니 기울기, 계수 이런 거였던 거 같다. 아무튼)
이걸 알기 위해 x에 학습데이터를 넣고 y가 나올때까지 돌린다. (y추정값 - y = 0 이 나올 때까지)
그 값이 나올때 w를 모으면 모델이다.
독립변수가 1개 일 때 머신러닝이라고 하고(교사학습)
독립변수가 많을 때 딥러닝이라고 한다.(교사학습)
실제값 y가 주어지면 교사학습이다.
결과적으로 w를 찾는것이 머신러닝.(x와 y의 관계를 나타냄)
x(데이터, 특징, 독립변수)* w(모델) =y(라벨, 종속변수)
과적합 예시

같은 사람이지만 과적합인 경우 안경이 없어서 사람으로 인식하지 못할 수 있다.
모든 세세한 특징까지 잡는 것을 과적합이라고 한다.
딥러닝에서는 과적합이 될 가능성이 높다.(모든 특징을 포함한 문제)
공통적으로 많이 나오는 것을 특징으로 만드는 게 맞다.
과소적합 예시

대표적인 특징 몇개만 가지고 모조리 다 얼굴로 인식.
인공지능 초기에 강아지, 머핀 구분 하던 게 이런 예시로 보인다.
아무튼 과적합, 과소적합은 안 좋은 거다.
강화학습
교사학습의 변종으로 원하는 방향으로 학습이 될때
가점, 아닐 때 감점을 하여 높은 점수를 달성한 모델을 선택
사람의 경험적 판단을 학습시킬 때 좋다.
예시로 강아지, 네비게이션 있었음
머신러닝 학습 과정 요약
1. 문제 정의 및 목표 설정
> 시나리오, 고객의 요청, 분석하고자 하는 내용으로 무엇을 구할지
2. 데이터 수집 및 정제
> eda, 적합한 데이터 수집(api, db, csv 등), 결측치, 이상치 제거
3. 데이터 탐색 및 시각화
> eda, 데이터의 특징 파악, 다양한 도구(matplotlib, seaborn 등)
4. 특징 선택 및 엔지니어링
> eda, 기존 수집된 컬럼으로 계산하여 새로운 컬럼을 만들어 인사이트 도출
5. 모델 선택 및 학습
> 어떤 인공지능 모델을 사용하여 학습을 할지 선택(회귀, 종속, 독립변수)
6. 모델 평가 및 개선
> r**2, 정확도로 평가하고 부족한 경우 조건을 변경하며 적합하게 만들음
7. 모델 배포 및 활용
> 적합 모델이라면 만들어진 모델을 활용하여 유사한 상황에서 사용
> gcp에 업로드 및 웹서비스 적용
통계에서 사용되었던 EDA(탐색적 데이터 분석) 절차에 5 6 7이 더해진 것.
그리고 손실함수에 대한 개념과 경사 하강법의 존재를 알았다.
손실함수 : (y-y추정값) 제곱 한 값을 전부 더하고 y개수만큼 나눠준다. = 평균
경사하강법 : 손실함수를 최소화하기 위해 최적화하는 방법
규칙기반 인공지능
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
새로운 스팸 패턴이 나타나면 수동으로 작업해야 한다.
학습기반 인공지능(나이브 베이즈)
# 학습기반 분류모델 주석
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% 할인 받으세요.",
"안녕하세요, 오늘 오후 회의 시간 확인 부탁드립니다.",
"당첨되셨습니다! 상품 수령을 위해 여기를 클릭하세요.",
"신규 프로젝트 투자 기회를 놓치지 마세요.",
"안녕하세요 오늘 구매하면 50% 할인!",
"시간이 얼마 안남았어요 특별 할인 쿠폰을 받아가세요",
"이것은 당신을 위한 이벤트입니다.",
"가장 중요한건 지금 열심히 하는 것",
"지금 당신에게 필요한 쿠폰 5종 바로 드립니다.",
"오늘이 지나면 모든 제품의 가격이 상승해요",
"지금 바빠요? 어제까지 완성하기로한 보고서 관련",
"쇼핑몰 개인정보 관련 확인 안내",
"신제품 출시, 지금 방문하세요",
"안녕? 나는 지난번에 구경하던 상품이야",
"너가 구매를 한다면 난 결제하기 전까지 장바구니에서 기다릴게",
"00님의 장바구니에서 상품들이 기다리고 있어요",
"고민은 배송을 늦출 뿐, 시원하게 50% 할인 쿠폰 제공합니다.",
"문의하신 제품 답변 드립니다."
]
labels = [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0] # 1: 스팸, 0: 정상 이메일
# 데이터 전처리
vectorizer = CountVectorizer() # 벡터화, 문자를 숫자로 바꾼다.
X = vectorizer.fit_transform(emails) # emails를 분석하여 벡터 변환하여 x로 변수 저장
# 학습과 테스트 데이터로 분할 x, y에 대해서 학습, 테스트한다. 비율은 테스트가 0.2로 한다. 검증은 빠짐
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# 모델 학습
model = MultinomialNB() # 나이브베이즈 분류
model.fit(X_train, y_train) # x,y 학습
# 예측
y_pred = model.predict(X_test) # 예측 메서드를 사용하여 x_test를 예측하여 y_pred라는 변수 생성
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred) # 정확도
print(f"정확도: {accuracy * 100:.2f}%")
# 새로운 이메일 예측
new_email = ["이 기회를 놓치지 마세요! 특별 혜택이 기다리고 있습니다."]
new_email_transformed = vectorizer.transform(new_email)
print(f"새 이메일이 스팸입니까?: {model.predict(new_email_transformed)[0]}")
출력 결과
정확도: 50.00% 새 이메일이 스팸입니까?: 1
나름 스팸으로 적었지만 문장력이 약한 건지 인공지능의 한계인건지... 정확도가 낮게 나왔다.
더 많은 데이터가 들어가면 정확도가 올라갈 수도 있다.
나이브 베이즈 사용.
학습기반 인공지능(로지스틱 회귀)
# 해당 지표를 자신의 성과지표로 만들어 본다.
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, classification_report
# 고객 데이터 (그로스 마케팅 성과지표)
data = pd.DataFrame([
[1, 15000, 2, 30, 0, 1], # VIP 고객
[1, 7000, 1, 15, 0, 1], # 일반 고객
[1, 10000, 1, 40, 0.5, 2], # 이탈 위험 고객
[2, 30000, 3, 50, 1, 2], # VIP 고객
[2, 20000, 2, 120, 0, 3], # 일반 고객
[2, 15000, 1, 180, 0, 3], # 이탈 위험 고객
[2, 7000, 1, 120, 0, 3], # VIP 고객
[3, 7000, 1, 40, 0, 3], # 일반 고객
[3, 35000, 3, 30, 0, 1], # 이탈 위험 고객
[3, 40000, 3, 50, 0, 1], # VIP 고객
[3, 20000, 2, 45, 0, 2], # 일반 고객
[4, 20000, 2, 60, 0, 3], # 이탈 위험 고객
[4, 130000, 4, 60, 0, 1], # VIP 고객
[4, 25000, 2, 30, 0, 2], # 이탈 위험 고객
[4, 75000, 3, 50, 0, 1], # 일반 고객
[5, 30000, 2, 30, 0, 3], # VIP 고객
[5, 50000, 5, 60, 0, 2], # 이탈 위험 고객
[5, 30000, 3, 45, 0, 2], # 일반 고객
[5, 14000, 2, 30, 0, 2], # VIP 고객
[5, 7200, 1, 80, 0, 3] # 일반 고객
], columns=["방문 인원", "구매 금액", "메뉴 개수", "체류 시간", "남긴 음식", "고객 세그먼트"])
# 입력(X) / 출력(y) 데이터 설정
X = data.drop(columns=["고객 세그먼트"]) # 특징 데이터
y = data["고객 세그먼트"] # 레이블 (VIP, 일반, 이탈 위험 고객)
# 데이터 표준화 (스케일링) → DataFrame 유지하여 경고 방지
scaler = StandardScaler()
X_scaled = pd.DataFrame(scaler.fit_transform(X), columns=X.columns)
# 학습 & 테스트 데이터 분할 (70% 학습, 30% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42, stratify=y)
# 로지스틱 회귀 모델 학습 (multi_class 제거하여 경고 방지)
model = LogisticRegression(solver='lbfgs', max_iter=500)
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"정확도: {accuracy * 100:.2f}%")
# 분류 보고서
print("\n 고객 세그먼테이션 성능 평가:")
print(classification_report(y_test, y_pred, target_names=["서비스 나갑니다", "일반 고객", "청소 시작합니다."]))
# 새로운 고객 데이터를 입력하여 예측
new_customers = pd.DataFrame([
[4, 9500, 1, 30, 0], # 예상: VIP 고객
[2, 25000, 2, 60, 2], # 예상: 일반 고객
[1, 18000, 1, 30, 0] # 예상: 이탈 위험 고객
], columns=["방문 인원", "구매 금액", "메뉴 개수", "체류 시간", "남긴 음식"])
# 데이터 표준화 후 예측 (DataFrame 유지)
new_customers_scaled = pd.DataFrame(scaler.transform(new_customers), columns=new_customers.columns)
predicted_segments = model.predict(new_customers_scaled)
# 세그먼트 매핑
segment_labels = {1: "서비스 나갑니다", 2: "일반 고객", 3: "청소 시작합니다"}
# 예측 결과 출력
print("\n 신규 고객 세그먼테이션 예측:")
for i, segment in enumerate(predicted_segments):
print(f"신규 고객 {i+1}: {segment_labels[segment]}")
기존 템플릿을 활용하여 직접 구성
템플릿의 기준은 일단 머릿속으로 3 부류로 상, 중, 하를 대략적으로 나눠서 작성하였고
꽤 잘 맞았다.
나이브 베이즈 : 2가지 조건에서만 고를 수 있고
로지스틱 회귀 : 여러 조건에서 고를 수 있다.
로지스틱 회귀 성능이 더 좋은 것 같다.
템플릿을 사용한 로지스틱 회귀 분류 웹서비스 진행.
일단 외운다.
html : templates
css : static
app.py는 바깥 폴더.
근데 그동안 리눅스에서 사용하지 않았던 라이브러리가 많아서 설치도 해줘야 했다.
numpy, pandas, sklearn
python3 -m pip install numpy
python3 -m pip install pandas
python3 -m pip install scikit-learn
직접 시나리오를 정해서 해당 코드를 수정하여 웹서비스 진행


인공지능에 대해 배웠다.
수업할 때는 조금 이해한 것 같았는데 블로그 작성하며 복습을 하니 뒤죽박죽인 것 같다.
나름 작성하면서 더 읽어보니 조금 더 정리가 된 것 같다.
처음 수강할 때 의문을 가졌던 데이터 분석 그로스 마케팅인데 왜 머신러닝 딥러닝을 배우지?라고 생각한 것에 대해 답이 곧 나올 것 같다.
수업 시작 전의 모습과 현재 모습을 비교하라는 말씀을 자주 하셨는데
hello world만 알고 있었는데 머신러닝, 딥러닝까지 공부를 하고 있는 모습을 보니
정말 큰 동기부여가 된다.
배운 내용을 잘 활용할 수 있도록 반복해야겠다.
'그로스 마케팅' 카테고리의 다른 글
| 그로스 마케팅 25일차(머신러닝 :고객 재구매 예측 보고서 작성, 모델 성능평가, 결정트리, 랜덤포레스트 개념과 구현) (0) | 2025.03.11 |
|---|---|
| 그로스 마케팅 24일차(데이터 전처리, 특징엔지니어링, 선형회귀/다중 선형회귀, 로지스틱 회귀 , 모델 성능 평가 - 티처블 머신으로 정확도 개념 잡기) (3) | 2025.03.10 |
| 그로스 마케팅 22일차(chart.js, 루커스튜디오 : 기초, db연동) (6) | 2025.03.06 |
| 그로스 마케팅 21일차(태블루, chart.js) (1) | 2025.03.05 |
| 그로스 마케팅 20일차(취업특강, tableau) (4) | 2025.03.04 |