데이터를 기반으로 어떻게 제품을 개선해야 하는지 배웠습니다. 또한 머신 러닝에 관하여 배웠고 MLOps 엔지니어가 무엇이고 하는 역할이 무엇인지 학습하고 실습을 통해 실제로 머신러닝 모델을 사용해 데이터를 예측해 보았습니다.
머신러닝을 통해 데이터에서 코딩없이 패턴을 찾아 미래를 예측해주는 것이다. 제품을 사용하는 사용자들의 과거 행동을 보고 판단해 개인화 형태로 좀 더 좋은 추천이나 검색을 해줄 수 있다. 또한 운영상의 비용을 머신러닝을 통해 최소화할 수 있다. 챗봇을 통해 인건비를 줄일 수 있다.
데이터 과학자의 역할
decision science가 아니라 product science이다. (decision science는 챕터2의 데이터 분석가들이 속한 팀이다.)
보통 머신러닝을 막 만드는 것이 아니라 모든 중요한 문제를 정의하는 것이 우선이 되어야되기 때문에 문제 정의 측면에서 어떤 문제를 머신러닝으로 해결을 할 것인지 가설을 먼저 세워야한다. 그 가설을 통해 머신러닝으로 해결하려는 문제가 중요한 문제이고 머신러닝으로 해결할만큼 가치가 있는지 헤아려봐야한다.
데이터는 어떤 방식의 머신러닝 모델인지에 따라 수집방법이 달라진다.
모델 테스트는 머신러닝 모델에 따라 다르지만 훈련 데이터를 수집했을 때 훈련 데이터의 일부를 테스트 용으로 남겨놓고 나머지를 가지고 모델을 만들어 남겨놓은 데이터를 인풋해 아웃풋이 우리가 예상한 것과 동일한지 혹은 얼마나 근접해있는지 따지는 식으로 한다.
머신러닝은 waterfall 모델로 만들 때 시간이 오래걸리고 실수를 하면 복구하는데도 오래걸리므로 agile 방식으로 하는 것이 좋다. (빠르게 모델을 만들어보고 모델을 개발하고 배포하는데 생각하지 못한 이슈를 확인 후 조금씩 개선하는 것이 좋다.)
어느 정도 동작하는 모델을 만들어지면 학습 데이터 같은 오프라인 테스트뿐만 아니라 실제 우리 서비스를 쓰는 사용자들에게 노출시켜 정말로 좋아지는지 확인할 필요가 있다. (A/B 테스트)
훌륭한 데이터 과학자란?
실용적으로 문제를 해결해야 한다.(waterfall이 아니라 aglie 방법으로 작게 시작해서 고도화한다.)
뜨는 기술을 사용해 모델링을 하려고하지 말고 간단한 솔루션으로 모델링한다.
모델 개발 전체 과정
머신러닝 모델 개발과정은 전형적인 agile 개발 방법론을 따르게 된다.
머신러닝 모델링 예 - 개인화된 추천 엔진
여러 상품을 파는 곳이라면 추천이라는 것이 중요하다. 여러 상품이 있을 경우 나에게 맞는 것이 무엇인지 찾기가 힘들기 때문이다.
아마존에서는 어떤 사람이 특정 물건을 구매했을 때 그 물건을 산 사람들이 자주 구매하는 다른 물건을 데이터에서 패턴을 찾아 추천해준다.
머신러닝을 개발했을 때 사람이 했던 일을 기계가 하는 것에 저항감이 드는 경우가 존재한다. 따라서 바로 바꾸는 것이 아니라 A/B 테스트 시스템부터 재정비하고 이를 작은 기능 개선부터 시작해서 사람들에게 신뢰할 수 있는 감정을 만든 후에 머신러닝 모델을 만든다.
머신러닝 모델을 빌드하고 테스트하고 배포하고 모니터링하는 전체 과정을 자동화했기 때문에 마케터들이 규칙 기반으로 개선하지 않아도 된다. (이 전체 과정을 자동화하는 것이 MLOps이다.)
머신 러닝 모델링 예 - 사기 결제 감지
어떤 것을 사기 결제로 정의하느냐 그리고 그에 합당하는 예제들이 있는냐가 중요해진다. (잘못 데이터를 수집한다면 머신러닝 편향성이 생기게 되고 더 나아가 머신러닝 윤리 문제가 생길 수도 있다.)
정상 결제 데이터는 많기 때문에 사기 결제 데이터를 수집해야한다.
머신러닝 편향성의 예
상당 수의 사기 결제가 중국에서 발생했다. 만약 훈련 데이터가 잘못 수집되면 중국에서 결제한 상황은 모두 사기라고 판단할 수 있다. (이때 윤리적인 문제가 발생할 수 있다.)
신약 개발을 하는 제약회사인 경우 아픈 사람의 데이터를 특정 인종이나 성별만으로 수집할 때 다른 인종이나 성별에는 효과가 없는 경우가 발생할 수 있다.
범죄자 프로파일링을 통해 범죄 예측 머신러닝 모델을 만들었을 때 훈련 데이터가 대부분 흑인이라 흑인이 인풋이면 무조건 범죄자라고 예측하는 상황이 실제로 있었다.
머신 러닝 모델링 예 - 환자 이상 징후 예측
환자의 문제가 심각해지기 전에 예방 조치를 취한다. 따라서 100% 정확할 필요는 없다. 대략 50% 이상만 넘어가면 충분히 의미가 있다.
머신 러닝 모델링 예 - 농업용 자율 트랙터
밭이 넓은 경우 인건비가 발생하거나 실수가 발생하는데 자율 트랙터를 만들어 자동화한다.
의료 이미지(Medical Imaging) 분석
인공지능 머신러닝 기술이 워낙 발전해서 의료분야에서도 사용되고 있다.
머신 러닝의 정의
구체적으로 프로그래밍을 하지 않고 배울 수 있는 능력을 컴퓨터에게 주는 분야의 연구 (모델이 알아서 분류할 수 있게 해주는 것)
예제로 주어진 데이터로부터 학습한다.
학습의 종류
Supervised learning(지도 학습): 정답이 존재하는 학습
Unsupervised learning(비지도 학습): 명확하게 정답이 없지만 알아서 적당히 분류해주는 학습
Reinforcement learning(강화 학습): 자동으로 알아서 학습
학습 알고리즘
Linear Regreesion(선형 회귀)
Logistic Regression(로지스틱 회귀)
Decision Tree(의사 결정 나무)
머신 러닝 모델이란?
머신 러닝이란 데이터로부터 학습하는 알고리즘
머신 러닝 모델이란 학습을 결과로 만들어진 블랙박스(블랙박스: 동작은 하지만 이유를 알기가 힘들기 때문이다.)
머신러닝의 응용 분야에 따라 설명을 할 수 있어야 하는데 이를 ML Explainablility라고 한다.
머신 러닝 모델은 데이터 과학자가 만들고 MLOps는 만들어진 모델을 실제 서비스에서 사용하기 위해서 그 모델을 어딘가에 배포하고 API형태로 사용할 수 있게 만들어줘야 한다.
모델 트레이닝/빌딩: 머신 러닝 모델을 만드는 과정
머신 러닝의 종류
지도 기계 학습의 예
사진을 보고 무엇인지 판단하는 것(분류 지도 학습: 예측 대상이 유한한 카테고리)
주택이나 주식 가격 예측하는 것(회귀 지도 학습: 예측 대상이 연속적인 숫자)
지도 기계 학습도 아니고 비지도 기계 학습도 아닌 중간에 있는 형태의 머신 러닝이 있을 수 있다. (Semi-Supervised Learning: 준지도학습) GPT 같은 언어 모델의 훈련이 여기에 속한다. 정답이 있지만 정답을 일일이 만드는 것이 아니라 위키피디아 같은 곳에 있는 자연스러운 문장 자체가 정답을 제공해준다.
강화학습은 게임같은 환경에서 규칙을 익히고 어떻게 플레이해야 이기는지 학습하는 것이다.
지도 기계 학습 예제: 타이타닉 승객 생존 여부 예측
이러한 모델을 빌딩을 하려면 예를 충분히 머신 러닝 알고리즘에게 제공해줘야한다. 트레이닝셋의 한 필드는 최종적으로 예측해야하는 정보가 들어가있어야한다.(생존 여부)
트레이닝셋: 훈련 데이터
레이블/타겟 필드가 존재하면 지도 기계 학습이다.
예를 충분히 줘 머신 러닝 모델이 패턴을 찾아 생존한 사람들의 공통적인 특성, 사망한 사람들의 공통적인 특성 혹은 이 둘의 차이를 데이터에서 찾아 이를 기반으로 예측을 한다. 이를 개발자나 데이터 과학자들이 코딩을 하는 것이 아니라 머신 러닝 알고리즘이 알아서 판단한다.
머신 러닝은 행렬 계산과 같은 수치의 변환을 통해 계산을 한다. 따라서 트레이닝셋에 문자열이 있는 경우 수치로 바꿔줘야한다. (남자면 1, 여자면 2)
훈련 데이터를 그대로 쓰는 것이 아니라 사용하기 쉽게 수치들을 조합(컨버전)해 새로운 필드를 만들어낼 수 있다. (Feature Engineering)
지도 기계학습
X는 수치로 바꿔야한다. 전처리를 통해 트레이닝셋의 데이터들을 수치화하거나 사용을 하지 않아야한다.
수치 데이터들도 범위가 다르다면 범위를 맞춰주는 표준화를 해야한다.
학습 알고리즘으로 분류하는 방법을 데이터에서 배운다.
훈련이 끝나면 머신 러닝 모델을 배포하고 사용해야한다.(추론/예측) 보통 API 형태로 노출된다.
머신 러닝 모델의 예측이 필요한 경우 입력 데이터를 API로 넘겨주고 머신 러닝 모델의 출력이 예측값이 된다.
예: 추천 모델을 만들었다면 사용자의 입력에 맞게 바꿔주면 추천 상품을 보여준다.
머신 러닝 모델은 훈련하는 것이 다가 아니라 최종적으로 배포하고 서비스해서 추론/예측을 하는데 사용해야 되고 그 과정이 복잡해지기 때문에 MLOps와 같은 직군이 생긴다.
지도 학습 예: 스팸 웹 페이지 분류기
문자열로 된 훈련 데이터를 숫자의 집합으로 바꿔줘야하는데 한글의 특성을 통해 문자열에서 수치들을 뽑을 방법을 찾아냈다. 문장을 형태소 분석을 해서 품사별로 떼어낸 다음 조사의 비율과 명사의 비율을 계산해서 스팸 웹 페이지를 찾아냈다.
좋은 데이터 과학자가 갖는 특성
자신이 잘 모르는 도메인도 설명을 듣고 패턴을 찾아 머신 러닝 알고리즘이 학습을 하는데 도움이되는 특징(Feature)을 찾을 수 있다. 그러므로 머신 러닝에서 Feature Engineering이 중요하다.
비지도 학습 예: Language Model
비어있는 단어가 어려가지가 있을 텐데 학습된 것에 따라 가장 확률이 높은 것을 내거나 다양한 가능성에서 하나를 선택할 수 있다. (Language Model을 사용할 때 어떻게 파라미터(시스템)를 세팅하느냐에 따라 다르다.)
파라미터: 모델 내부에서 결정되는 변수 (이 값은 데이터로부터 결정된다.)
Language Model을 훈련시키는 방법
문장을 하나주고 문장을 context window 형태로 좌측에서 우측으로 이동시키면서 다음에 나올 단어를 정답으로 주고 예측을하게 훈련시킨다.
Language Model은 굳이 내가 정답지를 만들지 않아도 위키피디아 같은 자연스러운 문장들이 들어있는 페이지에 인풋과 정답이 다 들어있다. (Semi-Supervised Machine Learning)
파이썬과 같은 머신 러닝 모델 빌딩과 서빙이 가능한 언어를 선택해 모두 동일한 프레임워크를 사용한다.
모델 개발시 꼭 기억할 포인트(1)
데이터를 다른 형태의 feature로 변환해야한다면 코드도 데이터 과학자들이 제공해 유닛 테스트를 붙여 변환이 제대로 되었음을 검증할 수 있는 방법들을 제공해줘야 한다.
유닛 테스트: 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차
모델 개발시 꼭 기억할 포인트(2)
머신러닝 모델의 오픈소스로는 데이터브릭스에서 만든 MLflow나 구글에서 만든 Kubeflow가 있다.
모델 개발시 꼭 기억할 포인트(3)
모델을 계속해서 빌딩하고 업데이트하고 모니터링해주는 부분을 자동화해주는 부분이 필요해졌다. (MLOps의 역할)
시간이 지나면서 모델의 성능이 떨어진다. 1년동안 다시 훈련을 하지않은 모델의 성능이 30% 떨어졌다. 그 이유는 데이터가 계속해서 변화하기 때문이다.
시간이 지나면서 사람들이 사용하는 키워드의 패턴이나 웹 페이지는 패턴이 미세하게 변화하기 때문에 데이터의 성격이 바뀐다. (Data Drift)
재훈련해주는 과정을 자동화해주면 성능을 유지할 수 있다.
MLOps vs DevOps
DevOps는 개발자들이 만든 코드를 가지고 테스트를 돌리고 배포할 수 있는 형태의 패키지로 만들어서 프로덕션 서버에 배포를 하고 정말 잘 작동하는지 모니터링을 한다. 만약 문제가 발생하고 해결되면 발생원인을 찾아 재발을 방지한다. (코드부터 서비스 운영까지 전체 프로세스를 담당해주는 직군)
On-call을 통해 문제 발생시 빠르게 대체한다.
DevOps 엔지니어는 개발을 직접하진 않지만 서비스의 안정성 측면에서는 중요한 일을 하게되고 경험이 많아야한다.
프로덕션 서버: 운영 서버
escalation 프로세스: 어떤 사건이 일어났을 때 상사에게 지시를 받기 위해 하는 보고
On-call 프로세스: 대기 근무
MLOps는 DevOps가 하는 일과 유사하다. MLOps의 대상은 개발자들의 코드가 아니라 데이터 과학자들이 만든 머신 러닝 모델이다.
MLOps는 오프라인 테스트를 하고 그 결과가 좋으면 프로덕션 쪽에 배포하고 (보통 API 서버 안쪽에 넣게된다.) 간단한 테스트 후 모니터링한다. 문제가 발생하면 이전 버전으로 롤백하고 escalation 프로세스를 진행한다.
오프라인 테스트: 훈련에 사용했던 데이터셋이 있을 경우 20 ~ 25%를 테스트용으로 남겨뒀다가 모델이 빌딩된 다음 남겨놓은 데이터셋을 테스트로 사용하는 것.
Latency(실행시간): 모델이 얼마나 빨리 결과를 리턴하는냐가 중요하다.
CI(Continuous Integration): 개발자가 코드를 변경할 때 테스트를 돌려 코드가 문제가 없는지 확인하는 것
CD(Continuous Delivery or Deployment): CI가 문제없이 끝난 코드를 자동으로 프로덕션에 배포하는 것
CT(Continuous Training): 계속해서 자동으로 훈련 데이터를 수집하고 모델 빌딩하고 테스트하고 배포하고 모니터링하는 것 (최대한 자동화해서 실수를 줄이고 효율성을 높인다.)
CI & CD
CI: 개발자들이 어떤 코드를 바꾸는 순간 자동으로 모든 테스트가 돌고 문제가 없다면 코드를 패키지해서 배포하기 쉬운 형태로 만드는 것
CD: 제대로 빌딩된 CI가 있는 경우, 결과로 나온 패키지를 프로덕션 서버에 배포하는 것
MLOps 엔지니어가 알아야하는 기술
프로세스 전체를 최대한 자동화하는 것이 중요하기 때문에 SageMaker, Kubeflow, MLflow와 같은 end to end 머신 러닝 프레임워크에 대한 경험과 지식이 필요하다.
머신러닝에서 가장 중요한 것은 데이터
데이터 윤리와 주의할 점, MLOps
데이터는 과거의 기록이고 이를 통해 미래를 예측하는 것이 머신 러닝이다.
이미지 모델같은 경우 원본 이미지를 만든 사람의 권리도 문제가 된다.
데이터 기반 AI는 완벽한가? (1)
트레이닝셋의 품질이 머신 러닝 모델의 성능을 결정한다.
EMR(의료 진료 기록)은 환자의 건강 상태나 병력을 기록하지 않는다.
즉, 그럴듯해보이는 시스템에서 받는 데이터를 절대적으로 신뢰하지말고 자신이 직접 확인 해보고 판단해야한다.
머신 러닝, AI를 통해 어떤 문제를 해결할 것이고, 그 해결 방법이 우리가 원하는 것인지 확인해야한다.
데이터 기반 AI는 완벽한가? (2)
EU의 7가지 가이드라인
감독: 감독없이 사기업에 AI, 머신 러닝의 발전을 맏겨버리면 무슨일이 생길지 모른다.
견고성과 안전성: 이러한 모델로 인해서 생길 수 있는 위험한 요소들이 있을 수 있다.
개인 정보 보호 및 데이터 거버넌스: 모델이 잘못해서 개인 정보를 사용해 예측해 개인 정보를 침해할 수 있다.
투명성: 머신 러닝 모델이 어떻게 동작하는지 투명하게 보이면 좋다.
다양성과 비차별성과 공정성: 데이터 수집에 있어 차별이 있으면 안된다.
사회/환경 친화적: 머신 러닝, AI가 결국 사회와 환경에 친화적이어야 한다.
문제 발생시 책임 소재: 머신 러닝 모델로 결정했을 때 큰 문제가 발생했을 때 누가 책임져야 하는지 명확해져야 한다.
잘못된 개인정보 보존으로 인한 페널티
HIPAA (미국 의료 정보 보호법)
개인을 식별할 수 있는 정보를 다루는 기관은 주의를 기울여아한다.
GDPR/CCPA (유럽 일반 개인정보 보호법/캘리포니아 소비자 개인 정보 보호법)
불필요하게 개인 정보를 저장하면 안되고 저장할 경우 암호화해야한다.
집단 이기주의: 의료분야 예
미래에 발생하는 새로운 기회에서 어떤 역할을 수행할 것이 좋은지 개방적인 관점에서 바라보는 것이 중요하다.
AI의 발전과 미래 직업의 변화: 예)의사의 역할
AI는 의사의 잘못된 진단을 줄여주는 보조적인 역할을 할 것이다.
미래의 의사 모습은 어떨까?
비행기 조종사는 기계의 도움을 받고 비상시에 개입을 하는 형태로 돌아간다.
Simple ML for Sheets
H필드가 머신러닝 모델이 예측해야하는 타겟 필드
2 ~ 18번까지 비어있는 부분을 채워보는 작업을 한다.
어려웠던 내용은 아니지만 MLOps 엔지니어의 역할이 궁금했었는데 이번 강의를 통해 MLOps 엔지니어의 구체적인 역할뿐만 아니라 DevOps 엔지니어의 역할도 알 수 있었습니다. 개발을 하거나 머신 러닝을 만들 때 만드는 것으로 끝나는 것이 아니라 이를 배포하고 관리하는 것도 중요하다는 것을 알았고 이때 필요한 사람들이 MLOps, DevOps 엔지니어라는 것을 알았습니다.
안녕하세요 :) 국비지원 부트캠프 엘리스트랙입니다! 오늘도 개발 공부 열심히 하고 계시군요! 멋지십니다 :)
혹시 개발 공부하면서 기술면접에 대한 대비가 막막하시다면, 이번 기술면접 특강도 관심 가져보시면 좋을 것 같아 댓글로 행사 안내드려요~
프론트/ 백엔드 모두 실력있고, 실제 면접관으로 활동하고 계신 개발자 코치님께서 진행하시니 참여해 보세요> https://festa.io/events/4389
그럼 오늘도 화이팅입니다!🙇🏻♀️💪🏻