[책] 파이썬 데이터 분석 실무 테크닉 100 - 최적화, 시뮬레이션 부분 요약
in Data on Optimization
이젠 데이터분석가가 물류 최적화까지 알아야하는가?
파이썬 데이터 분석 실무 테크닉 100 - 최적화, 시뮬레이션 부분만 빠르게 요약해본다.
page 269
- 최적화문제
- 선형 최적화 : 덧셈으로 이뤄진거
- 비선형 최적화 : 행렬 연산으로 할수 없는 함수 형태
- 조합 최적화 : 외판원문제같은거
- 푸는 과정 : 초깃값에서 출발해서 최적값을 찾는거(=미분값이 0이되는곳, 여러곳이면 그중에 최적인것)
- 선형 최적화 : 심플렉스법
- 제약조건의 ‘끝점’을 찾아가는 방법
- 참고 <- 여기서 slack 내용도 나옴
- 비선형 최적화 : 라그랑주 미정계수법
- 미분값이 0이 되는 지점을 찾는방법
- 선형 최적화 : 심플렉스법
- ‘조합 폭발’이 발생시(=모든 조합 패턴을 계산하는것이 원리적으로 불가능시)
- ‘휴리스틱’을 써야함(경험적으로 최적해를 푸는 방법)
- 문제 복잡도는 4개의 클라스로 나뉨
- P
- NP
- NP-완전
- NP-난해
Tech 51~52
- 물류문제들
- 어떤 물품을 얼마나 생산하는 것이 효율적인가?
- 어느 창고에 얼마만큼의 재고를 보관하는 것이 효율적인가?
- 어느 창고에서 대리점까지 몇 개의 상품을 운송하는 것이 효율적인가?
- 최적화 문제란
- 정해진 제약조건 아래 목적함수를 최소화(또는 최대화)하는 문제
- 회귀분석이랑 비슷하다
- 회귀분석에서 coefficient값을 찾을때 경사하강법을 쓴다(=최소제곱법)
- 여기서 ‘잔차제곱합(RSS)’을 최소화 하는 회귀계수를 찾는것이 목표
- 실무에서 만날수 있는 최적화문제
- 머신러닝 : 고객 이탈 예측 등
- 최적화 : 지하철 운행 스케쥴, 물류창고 최적경로, 모빌리티 차량 재배치
- 고객의 소리
- 물류비용을 줄이고 효율화하고 싶다. 제품의 부품을 보관하는 창고에서 생산 공장까지 운송 비용을 낮출 수 있는지 검토(=운송 비용 최적화)
- 분석 요약
- 남부/북부 실제 데이터 운송비용이 차이가 났고
- 남부/북부 운송비 테이블은 운송비용이 차이가 안났다
- 그러므로 비효율적으로 운송되고있다고 판단
Tech 53~57
- 그래프로 어디 경로가 운송량이 많은지 이런거 볼수있다.
Tech 58~60
- 어떤 경로만 살리고 어떤 경로는 버릴지는 “운송비용”이 적은 경로를 선택하는 것 뿐만 아니라 “제품의 수요와 공급”에 대해서도 생각해봐야 한다.
- 가짜 데이터로 수요 공급 만들었는데, 최대 공급한거보다 더 크게 만들어서 최적경로 만들수없음
Tech 61
- 논리 순서
- 수리모델을 작성 : 목적함수 m1 정의, 제약조건 추가(최소 수요량 이상, 최대 생산량 이하 만족)
- 최적해(optimal solution)인 v1 만들기 : 최적의 운송 경로(운송량)을 의미
- 최적값(optimal value) 구하기 : 최소화된 운송 비용
- 코드
- m1 , v1 정의 하고 model 정의하고
- 목적함수 식 넣고, 제약조건식 넣고
- solve로 계산
Tech 62
- 시각화하고 제약조건도 만족하는지 확인
Tech 64~67
- 목적 : “생산 계획 최적화”, “어떤 제품을 얼마나 만들것인가?”
- 데이터
- 제품에 원료 비중
- 제품마다 이익
- 원료 재고
- 제품 생산량(얼마나 만들것인가?)
- 총이익(목적함수) = 제품별이익(변동불가) x 생산량(조정가능, 최적해 v2)의 합
- 제약조건 : 원료의 양 제한
- 논리순서
- 목적함수 m2를 만들고, 제약조건 추가
- 최적해 v2만들기
- 최적값(최대화된 총이익) 구하기
- 코드
- m2 모델만들고, v2만들고
- m2 (이익x생산량) 만들기
- 제약조건 만들기
- solve (최적화 구하기)
- 제약조건 만족하는지 보기
- 이전 최적해, 최적값과 비교해보기
Tech 68~70
- 앞에서 배운 운송 경로최적화/생산계획 최적화를 합친다.(둘다 만족하는 네트워크를 만든다)
- 코드 스토리 순서
- 대리점<->공장 운송비
- 대리점<->제품 수요량
- 공장에서의 제품 생산비용과 생산량(하한:최소생산량, 상한:최대생산량)
- 운송비용, 생산비용, 수요량은 변동불가
- 생산량과 운송량은 바꿀수 있다.
- logistics_network쓰면 바로된다.(각각정보를 집어넣으면 쉬움)
- 제약조건 잘 맞는지 확인
- 최적값 확인
Tech 71 (시뮬레이션)
- 고객의 소리 : SNS를 통해 입소문을 타고 퍼지고 있다. 재구매 고객은 SNS로 연결되어 있어 파악이 가능하다. 매출을 예측해달라
- 제품이 입소문을 타고 어느정도의 시정 이후에 몇개나 팔리게 되는지 예측(시뮬레이션)해보자
- 데이터
- 재구매 고객 20명의 SNS 연결상태 데이터(연결 1, 아니면 0)
- 모든 재구매 고객 540명 SNS 연결상태
- 모든 재구매 고객 540명의 2년간 매월 이용 현황
- 시뮬레이션이란?
- 실제로 일어나지 않은 일을 미리 실험해보는것
- 확률을 이용하여 실제로 홍보가 일어나기 전에 “이 정도의 입소문 확률을 가정한다면 고객에게 전파되는 데 얼마나 걸릴까?”를 구해본다.
- 미래를 미리 예측해볼 수 있다면, 제품이 널리 퍼지는데 걸리는 시간을 알 수 있고, 제품을 출시할지, 아님 어떤 시점에 프로모션을 진행할지 등의 의사 결정을 하는데 큰 도움이 될것이다.
- 의식 흐름
- 연결되어있는 데이터를 가지고 있으니까,
- 한명한테 10프로 확률로 퍼트린다고 하면 몇개월후에 어떻게 될까?를 시각화
Tech 73
- 앞에서는 ‘전파’만 생각했는데, ‘탈퇴’도 고려해보자
- 전파확률 10%, 탈퇴(소멸)확률 5%로 잡아보자
- 코드도 이거와 같이 짜면 됨.
- 전파확률보다 탈퇴확률이 높으면 금방 전파가 꺼짐
Tech74
- 확산확률과 소멸확률의 임계점을 구하기
- 숫자 조금씩 바꾸면서 그래프화
Tech 76 ~78
- 큰 데이터로 시뮬레이션 해본다
- 시각화도 노드로 못보여주기때문에 히스토그램으로
- 소멸확률 추정
- 잔존율 처럼 계산
- 확산확률 추정
- 전파가 된 이유는 다른 고객과 연결되기 때문으로만 한정 한다는 가정
- 계산 코드는 필요할때 쓰면될듯
Tech 79~80
- 실제 데이터와 비교하고 미래를 예측