- Jupyter Notebook에서 Python 라이브러리를 사용하여 머신 러닝 모델 훈련하기
- 학습된 머신 러닝 모델을 Streamlit 웹 앱에 통합하기
이 단원의 활동은 다음과 같습니다:
머신러닝 모델 작업
주피터 노트북, Python, Streamlit의 또 다른 주요 기능은 머신러닝 모델을 학습하고 예측할 수 있는 기능입니다.
인공지능을 처음 접하는 분이라면 이 커리큘럼의 인공지능 강의를 통해 기초를 익힌 후 여기서 다루는 고급 코딩에 뛰어드는 것이 좋습니다. Teachable Machine과 같은 사용자 친화적인 머신 러닝 모델 플랫폼을 사용하여 모델을 만들고 이를 Python 웹 앱에 통합할 수 있습니다.
인공지능에 대한 경험이 있고 Jupyter Notebook을 사용해 데이터 세트로 작업해 본 적이 있다면 다음 단계로 넘어가셔도 좋습니다.
이 단원에서는 몇 가지 Python 머신 러닝 라이브러리와 Python을 사용하여 만들 수 있는 다양한 머신 러닝 모델에 대해 알아봅니다.
검토하자면, 머신러닝 모델을 만드는 데는 크게 세 가지 부분이 있습니다.
데이터 세트
학습 알고리즘으로 패턴 찾기
예측!
데이터 세트는 모델에 대한 입력입니다. 여기에는 텍스트, 이미지, 사운드 또는 포즈가 포함될 수 있습니다. 2단원에서는 주피터 노트북을 사용해 텍스트와 숫자 데이터로 작업했습니다. 이번 단원에서는 스프레드시트 형태의 텍스트 데이터로 계속 작업하겠습니다.
패턴 찾기는 기본적으로 데이터 세트를 사용하여 머신 러닝 모델을 구축하는 것입니다. 파이썬에는 데이터로부터 AI 모델을 구축하는 데 필요한 많은 라이브러리가 포함되어 있습니다. 이 커리큘럼에서는 scikit-learn 패키지의 많은 함수를 사용할 것입니다. 이 웹사이트에는 제공하는 라이브러리 외에도 머신 러닝과 모델 구축 과정에 대한 훌륭한 정보가 많이 포함되어 있습니다. 더 많은 것을 배울 수 있는 훌륭한 리소스입니다!
모델을 생성한 후에는 새로운 정보를 기반으로 결과를 예측하는 데 모델을 사용할 수 있습니다. 다시 한 번, 파이썬은 이를 가능하게 하는 라이브러리를 제공합니다.
데이터 전처리
데이터 집합을 모델 구축을 위한 알고리즘으로 전송하려면 먼저 다음을 수행해야 합니다. 전처리즉, 모델 구축 알고리즘이 이를 사용하여 가장 정확한 모델을 만들 수 있도록 "정리"해야 합니다. 실제로 머신 러닝 모델을 만드는 작업의 대부분은 전처리에 있습니다. 데이터를 주의 깊게 살펴보고 무엇이 중요한지, 무엇을 제외할 수 있는지, 무엇을 정리해야 하는지 결정해야 합니다.
전처리에는 어떤 작업이 포함되나요? 텍스트 기반 데이터 집합의 경우 처리해야 할 몇 가지 사항이 있습니다.
Null 값
특히 설문조사 데이터인 경우 데이터 집합에 공백 또는 null 값이 포함되는 경우가 있습니다. 때때로 null 데이터가 있는 행을 제거할 수 있습니다.
그러나 샘플 수가 적은 경우에는 제거하지 않을 수도 있습니다. 또 다른 옵션은 null 값을 다른 값으로 대체하는 것입니다. 0이 될 수도 있고 해당 필드에 대한 다른 모든 값의 평균이 될 수도 있습니다.
이상값
데이터에 나머지 데이터와 매우 다른 샘플이 한두 개 포함되어 있는 경우가 있습니다. 이 경우 모델이 왜곡될 수 있습니다. 이상값이 모델 생성 방식에 영향을 미치지 않도록 하려면 데이터 집합에서 이상값을 제거하는 경우가 많습니다.
예를 들어, 샘플의 95%가 10~30세인 데이터 집합이 있지만 50세 이상의 무작위 샘플이 몇 개 있다고 가정해 보겠습니다. 대부분의 샘플이 10~30세 그룹에 속하므로, 나이가 많은 그룹에서 샘플을 제거하는 것을 고려할 수 있습니다.
표준화
대규모 데이터 집합의 숫자는 표현되는 기능에 따라 달라지는 경우가 많습니다. 예를 들어, 0에서 70까지 다양한 연령이 있을 수 있고, 0에서 50만까지 다양한 연봉이 있을 수 있습니다. 척도가 매우 다르므로 모델에서 하나의 기능이 더 많이 계산될 수 있습니다.
이 문제를 해결하려면 데이터를 표준화하여 단일 척도로 만들 수 있습니다. scikit-learn은 평균이 0이 되고 표준 편차가 1이 되도록 각 기능을 업데이트하는 StandardScaler를 제공합니다.
또 고려해야 할 사항은 각 클래스 또는 레이블의 샘플 수를 균형 있게 조정하는 것입니다. 데이터 집합에서 각 클래스의 샘플 수가 거의 같은지 확인해야 합니다.
인코딩
인공지능은 단어가 아닌 숫자를 좋아합니다. 따라서 모든 데이터를 숫자로 변환하는 것이 도움이 됩니다. scikit-learn은 인코더 기능을 제공하므로 가능한 다양한 텍스트 값을 다양한 숫자로 쉽게 변환할 수 있습니다.
예를 들어 활동 수준을 예로 들면 샘플 값이 앉아서, 가벼운, 보통, 높음인 경우입니다. 이러한 응답은 0, 1, 2, 3 값으로 인코딩할 수 있으므로 모델 구축 알고리즘이 훨씬 쉽게 처리할 수 있습니다.
데이터 분할
데이터를 전처리한 후에는 데이터를 학습 세트와 테스트 세트로 분할해야 합니다. 훈련 세트는 모델을 훈련하고 생성하는 데 사용됩니다. 그런 다음 테스트 세트를 사용하여 모델을 테스트하여 성능을 확인합니다.
표준 분할 방법(일반적으로 교육용 75%, 테스트용 25%)이 있지만 원하는 대로 분할할 수 있습니다. 다시 말하지만, 이 모든 것이 자동화되어 있는 기능이 제공됩니다.
모델 만들기
다음 단계는 모델을 만드는 것입니다. 가장 중요한 결정은 어떤 알고리즘을 사용할 것인가 하는 것입니다. 선택할 수 있는 지도 학습 알고리즘은 매우 다양하며, 어떤 알고리즘을 사용해야 할지 알기 어렵습니다. 좋은 방법은 여러 가지 알고리즘을 사용해 본 다음 어떤 알고리즘이 가장 정확도가 높은지 확인하는 것입니다.
첫 번째 단계는 필요한지 여부를 결정하는 것입니다. 분류 알고리즘이 필요한지 아니면 회귀 알고리즘이 필요한지 결정하는 것입니다. 이는 예측하려는 대상에 따라 다릅니다.
분류 알고리즘 은 개별적인 대상이나 클래스를 예측하는 데 사용됩니다. 예를 들어, 이메일을 스팸으로 분류하거나 스팸이 아닌 것으로 분류하는 것은 분류 문제입니다.
회귀 알고리즘 은 연속적인 범위를 따라 무언가를 예측하는 데 사용됩니다. 한 가지 예로 어떤 사람이 얼마의 급여를 받을지 예측하는 것을 들 수 있습니다. 예측은 숫자 범위이며 출력은 해당 범위의 모든 값이 될 수 있습니다.
다음은 인기 있는 모델 생성 알고리즘의 몇 가지 유형입니다.

분류
- 의사 결정 트리
- 랜덤 포레스트
- K-네이버 이웃
- 나이브 베이즈
- 로지스틱 회귀
- 벡터 머신 지원
회귀
- 선형 회귀
- 릿지 회귀
- 올가미 회귀
- 다항식 회귀
- 베이지안 선형 회귀
- 벡터 회귀 지원
일부 알고리즘은 두 가지 유형 모두에 해당합니다. 예를 들어 의사 결정 트리 분류기와 의사 결정 트리 회귀 분석기가 있습니다. 그리고 서포트 벡터 머신은 분류를 위해, 서포트 벡터 회귀는 회귀를 위해 작동합니다.
그렇다면 어떤 모델을 사용할지 어떻게 결정할까요? 다른 데이터 과학자들이 다양한 상황에 어떤 알고리즘을 사용하는지 조사하여 내 모델에 적합한 알고리즘이 무엇인지 확인해야 합니다. 또한 데이터로 몇 가지 다른 알고리즘을 사용해 본 다음 어떤 알고리즘이 가장 정확도가 높은지 찾아야 합니다. 특정 알고리즘의 매개 변수를 조정하여 더 정확한 모델을 반환하는지 확인할 수도 있습니다.
scitkit-learn은 이러한 모든 알고리즘에 대한 함수를 제공하므로 모델을 쉽게 만들 수 있습니다.
모델 평가하기
모델을 최상의 상태로 만들려면 모델의 성능을 평가해야 합니다. 모델을 평가할 때 흔히 사용되는 두 가지 변수는 편향과 분산입니다.
편향 는 모델의 예측 값과 정확한 값의 차이입니다.
분산 는 다른 데이터를 사용할 때 예측이 얼마나 변화하는지를 나타냅니다.
편향과 분산 사이의 균형을 잘 맞추고 싶을 것입니다.
높은 편향성 -> 언더피팅.
과소 적합 은 모델이 너무 단순하여 학습 데이터의 노이즈를 설명하지 못할 때 발생합니다. 데이터가 충분하지 않거나 특징(열)이 충분하지 않거나 데이터에 노이즈가 너무 많을 때 발생할 수 있습니다. 모델이 학습 데이터와 테스트 데이터 모두에서 잘 작동하지 않는다면 과소 적합을 나타냅니다.
높은 분산 -> 과적합.
과적합 은 한 세트의 데이터로 모델을 학습시켰을 때 매우 잘 작동하지만 새로운 데이터를 제시하면 전혀 잘 작동하지 않는 경우에 발생합니다. 이는 모델이 지나치게 복잡하고 학습 데이터에 너무 가깝게 맞추려고 할 때 발생할 수 있습니다. 모델이 학습 데이터에서는 매우 잘 예측하지만 테스트 데이터에서는 성능이 저하될 수 있습니다.
모델의 성능을 확인하는 한 가지 기법은 교차 검증입니다.
교차 검증 은 매번 다른 훈련/테스트 데이터 분할을 사용하여 모델을 여러 번 훈련하는 것을 의미합니다. 데이터 세트는 여러 폴드또는 하위 집합으로 분할됩니다. 그런 다음 하나의 폴드를 유효성 검사 또는 테스트 집합으로 사용하고 나머지 폴드를 사용하여 훈련합니다. 이 작업은 여러 번 수행되므로 매번 훈련 및 테스트 세트가 변경됩니다.
sciikit-learn은 또한 metrics 라이브러리를 제공하므로 모델의 성능 점수를 쉽게 얻을 수 있습니다.
- 정확도 점수 = 정확한 예측/총 예측 수
- 정밀도 = 정탐/(정탐 + 오탐)
- 리콜 = 정탐/(정탐 + 오탐)
- F1 점수 = (2 x 정밀도 x 리콜)/(정밀도 + 리콜)
- 특이도 = 진성 음성/(진성 양성 + 거짓 음성)
- 혼동 행렬 - 진양성, 진음성, 오탐, 오탐 수를 표시합니다.
다양한 알고리즘의 메트릭을 확인하여 최적의 모델을 선택할 수 있습니다.
예측!
만족스러운 모델을 찾았다면 앱에서 이를 사용할 수 있습니다.
주피터 노트북과 같은 환경에서는 Python을 사용하여 모델의 전처리, 생성 및 평가를 수행하는 것이 일반적입니다. 그런 다음 모델을 파일로 내보낼 수 있습니다.
그런 다음 Streamlit 앱 내에서 모델을 로드하고 예측에 사용할 수 있습니다.
이 단원의 활동에서는 뇌졸중 위험 데이터 세트를 사용하여 이 전체 과정을 진행합니다. 데이터를 전처리하고, 다양한 알고리즘을 사용하여 모델을 생성한 다음, 간단한 Streamlit 앱에서 모델을 사용하여 몇 가지 입력 특성이 주어지면 뇌졸중 위험을 예측하는 방법을 살펴봅니다.
활동 1: 주피터 노트북에서 AI 모델 훈련하기
뇌졸중 위험 데이터세트를 탐색하여 AI 모델 구축하기
- Kaggle에서 뇌졸중 예측 데이터 집합을 다운로드합니다.
- Jupyter 노트북의 데이터로 작업하려면 다음과 같이 하세요:
- 데이터 검토
- 데이터를 사전 처리하여 모델에 맞게 준비하기
- 다양한 모델 만들기
- 앱의 모델 평가 및 선택
- 모델 내보내기
도전 과제

주피터 노트북에 있는 모델과 다른 모델을 사용해 보세요.
- 다른 분류 알고리즘에 대해서는 scikit-learn 웹사이트를 조사하고, Kaggle에서 다른 모델 구축 예제를 살펴보세요.
- 하나의 알고리즘을 선택하고 노트북에 코드를 추가하여 모델을 만듭니다.
- 정확성을 확인하려면 scikit-learn 메트릭을 사용하세요.
모델의 성능은 어떤가요? 노트북의 다른 알고리즘보다 더 나은가요?
활동 2: 예측 앱 구축하기
스트림릿 앱에서 모델 사용
앱을 코딩하는 방식에 따라 적절한 동영상을 선택하세요(로컬에서 Visual Studio Code를 사용하거나 온라인에서 코드스페이스를 사용).
도전 과제

기술 혁신 영감
다음은 파이썬과 스트림릿을 사용하여 머신러닝 모델을 통합한 웹 앱을 구축한 테크노베이션 참가자들의 놀라운 사례입니다.
T.E.D.D.Y - 청소년을 위한 텍스트 기반 조기 조난 감지기 , 작성자 미국의 TEDDY 팀는 교사와 카운슬러가 학생들의 정신 건강 문제를 조기에 발견할 수 있도록 지원합니다. TEDDY는 AI를 사용하여 부정적인 감정을 표현하거나 우울증 환자에게서 예상되는 언어 패턴을 보여주는 문장을 식별합니다. 그런 다음 학생을 상담사에게 의뢰하여 도움을 받을 수 있습니다.
돌아보기
데이터 집합을 전처리하고, 여러 모델을 구축하고, 앱에서 사용할 모델을 평가하고 선택하는 전체 과정을 거쳤습니다. 한 강의에서 배울 수 있는 내용이 정말 많습니다!

주요 용어 검토
- 전처리 - 데이터 세트를 가져와서 그 안의 데이터가 머신 러닝 모델을 훈련하기에 적합한지 확인하는 작업입니다.
- 분류 알고리즘 - 불연속형 값을 분류하거나 예측하는 머신 러닝 모델을 학습시키는 데 사용되는 알고리즘입니다.
- 회귀 알고리즘 - 연속 범위의 값을 예측하기 위해 머신 러닝 모델을 학습시키는 데 사용되는 알고리즘
- 편향 - 모델을 단순화하는 잘못된 가정으로 인해 모델의 예측 값과 정확한 값 사이의 차이입니다.
- 분산 - 새로운 데이터에 직면했을 때 모델이 일반화할 수 없는 경우 모델 예측의 변동성 정도입니다.
- 과적합 - 모델이 학습 데이터에 너무 잘 맞아서 새로운 데이터를 잘 예측하지 못하는 경우, 모델의 높은 분산으로 인해 발생합니다.
- 과소 적합 - 모델이 지나치게 단순화되어 훈련 또는 테스트 데이터에서 잘 작동하지 않는 경우, 모델의 높은 편향이나 가정으로 인해 발생합니다.
추가 리소스
머신 러닝
- 괴짜를 위한 괴짜 머신 러닝 튜토리얼 - 머신 러닝 프로세스 및 용어에 대한 훌륭한 소개와 개요를 제공합니다.
- Simplilearn의 Scikit-Learn 튜토리얼 - 와인 품질 데이터 세트를 통해 Jupyter 노트북에서 Scikit-Learn을 사용하는 연습을 해보세요.
- scikit-learn을 사용한 머신 러닝 - 데이터 스쿨의 전체 유튜브 재생 목록
Streamlit
- 패트릭 로버와 함께 처음부터 머신 러닝 웹 앱 구축하기 - 처음부터 끝까지 모델을 구축하고 웹 앱에서 사용하는 또 다른 예제입니다.
- 이미지에 대해 학습된 모델인 경우 Streamlit을 사용한 이미지 분류기