반응형

 

환경(environment)

에이전트(agent)

 

상태(state)

행동(action)

보상(reward)

 

탐험과 탐사 갈등(Exploration and exploitation conflict)

마르코프 결정 프로세스(MDP) Markov Decision Process

 

정책(policy)

가치(value)

 

상태 가치 함수(State value function)

벨만 수식(Bellman equation)

상태-행동 가치함수(state-action value function)

 

할인 누적 보상액(discounted accumulating reward)

MDP(Markov Decision Process) 확률분포

 

상태 -> 상태 가치 함수 -> 상태-행동 가치함수 -> 행동

상태 -> 가치 -> 정책 -> 행동


https://wordbe.tistory.com/entry/RL-%EA%B0%95%ED%99%94%ED%95%99%EC%8A%B5-part1-policy-value-function

[RL] 강화학습 part1 - policy, value function

[RL] 강화학습 part1 - policy, value function Reinforcement Learning 1. 강화학습 원리와 성질 state, action을 번갈아 가면서 목표를 달성합니다. 강화학습 교과서(Sutton, 2017) 참고 1) 계산 모형 상태, 행..

wordbe.tistory.com

 

강화학습의 목표는 '누적' 보상액을 최대화하는 것입니다.

에이전트가 행동을 선택하는 데 사용하는 규칙을 정책(policy)이라고 하며, 강화 학습 알고리즘은 최적의 정책을 찾아야 합니다.

 

탐험과 탐사 갈등(Exploration and exploitation conflict) :

k-손잡이 밴딧(k-am bandit) 문제

이 둘의 방식을 보완하기 위해 균형 방식을 사용합니다.

2번에서 잭팟이 나온 이후로 2번 기계를 더 자주 선택하는 대신 다른 기계에게도 계속 기회를 주며 잭팟이 또 터지면 새로운 정보를 고려하여 확률을 배분하고 수정하는 것입니다.

 

마르코프 결정 프로세스(MDP) Markov Decision Process

현재 상태에서 행동을 결정할 때 이전 이력은 중요하지 않고, 현재 상황이 중요한 조건을 마르코프 성질(Markov Property)을 지녔다고 합니다. 예를 들면 바둑이 있습니다.

강화학습은 마르코프 성질을 만족한다는 전제하에 동작합니다.

따라서 Markov property를 근사하게라도 만족하는 문제에 국한하거나, 근사하게 만족할 수 있도록 상태 표현을 설계해서 적용합니다.

결정론적(Deterministic) MDP :​ 딱 한가지 상태와 보상이 있는 경우, 나머지 보상은 전부 0

확률론적(Stochastic) MDP :​ 다음 상태와 보상이 확률적으로 결정되는 경우

 

정책과 가치함수

강화 학습의 핵심은 좋은 정책을 찾아내는 것입니다.

좋은 정책이 있으면 누적 보상을 최대로 만들 최적 행동을 매 순간 선택할 수 있습니다.

정책 공간은 너무 방대해서 최적 정책을 찾는 접근 방법은 무모하며,

최적 정책을 찾아가는 길잡이 역할을 하는 가치함수를 소개합니다.

 

1) 정책(policy)

정책이란 상태 s에서 행동 a를 취할 확률을 모든 상태와 행동에 대해 명시한 것입니다.

최적 정책 찾기

goodness(π)가 정책 π의 품질을 측정해주는 함수라고 합시다.

학습 알고리즘은 위를 만족하는 정책 π^를 알아내어야 합니다.

바둑 같은 문제 에서는 상태공간(state space)이 방대합니다.

정책 공간(policy space)은 서로 다른 정책 집합을 뜻하며, 상태 공간보다 훨씬 방대합니다.

따라서 강화학습에서는 정책공간을 일일이 직접 탐색하는 대신 '가치함수'를 이용합니다.

최적 가치함수를 찾으면 최적 정책을 찾는 것은 사소한(trivial) 문제가 됩니다.

 

2) 가치함수(Value function)

가치함수는 특정 정책의 좋은 정도(상태 s로부터 종료 상태 이르기까지 누적 보상치의 추정치)를 평가합니다.

정책 π에서 추정하며 상태 s의 함수이므로 vπ(s)로 표기합니다.

즉, 위에서 쓰인 goodness는 곧 가치함수로 바뀝니다.

P(z)는 경로 z의 발생확률, r(z)는 경로 z의 누적 보상액입니다.

 

강화학습에서 유한 경로를 가진 과업을 에피소드 과업(episode task)이라고 합니다.

반면, 무한경로를 가진 과업을 영구과업(continuing task)이라고 합니다.

 

특별히 영구과업은 무한대 보상을 막기 위해 할인 누적 보상액(discounted accumulating reward)을 사용합니다.

γ를 할인율(discounting rate)이라고 하며, 0≤γ≤1입니다.

0이면 rt+1만 남으므로 순간의 이득을 최대화하는 탐욕 방법인 근시안적 보상액이 되며,

1이면 맨 위의 식처럼 된다.

따라서 할인 누적 보상액은 현재에서 멀어질수록 보상을 할인하여 공헌도를 낮추는 전략을 사용합니다.

 

가치함수 추정을 위한 순환식

마치 점화식처럼, 다음 상태에서의 가치함수를 표현하여, 가치함수를 간단히 쓸 수 있습니다.

 

스토캐스틱 프로세스에서 가치함수 추정

지금 까지 수식은 결정론적 프로세스(deterministic process)였습니다.

결정론적 프로세스는 많은 응용을 설명하지 못하지만,

현실에서 모든 요인을 상태 변수에 반영하는 대신 주요 요인만 반영하고 나머지는 무시한 상황서의 상태, 행동, 보상을 스토캐스틱 프로세스(stochastic process)라고 합니다.

스토캐스틱한 성질은 P(s', r|s,a) 확률로 표현됩니다. 이는 MDP 확률분포입니다. 즉, 상태 s에서 행동 a를 취했을 때 상태 s'로 전환하고 보상 r을 받을 확률입니다. 스토캐스틱은 이 값이 여러개일 수 있으므로, 모두 더해줍니다.

가치함수는 MDP 확률분포가 제공하는 정보와 정책 π가 제공하는 정보를 모두 활용하여 정책을 평가합니다.

무한 경로를 가진 응용문제에는 할인율을 적용한식을 사용하면 됩니다.

위 두식은 상태 가치 함수(State value function)라고 합니다.

위 두식의 순환식을 가치함수를 위한 벨만 수식(Bellman equation)이라고 하며, 현재 상태의 가치는 다음 상태의 가치의 관계를 간결하게 표현합니다.

 

 

이와는 다르게 상태와 행동에 대한 가치함수는 상태-행동 가치함수(state-action value function)라고 하며 식은 아래와 같습니다.

 

3) 최적 가치 함수

최적 가치함수를 알아 최적 정책을 쉽게 결정할 수 있습니다.

상태 가치함수는 mean 연산을 통해 구하는 반면, 최적 가치함수는 max 연산을 통해 구합니다.

 

1) 처음에는 임의값으로 정책을 설정하고 출발합니다.

2) 정책에 따라 가치함수를 계산합니다.(정책의 품질 평가)

3) 얻은 가치함수로 더 나은 정책으로 개선합니다.

​ 정책의 평가와 개선은 MDP 확률분포를 기초로 이루어집니다.

4) 정책 개선 싸이클이 없을 때까지 반복합니다.

​ 동적 프로그래밍, 몬테카를로 방법, 시간차 학습 알고리즘은 모두 이 아이디어에 근거합니다.

 

 

반응형
반응형

글쓰기 요령

2021-01-14

완성할 수 있도록 범위를 정하여 시작하고 시작한 글은 끝까지 쓴다.

일련의 글들이 큰 그림이 될 수 있도록 일관성이 필요하다.

이뻐 보일 수 있도록 정리, 정돈 기술이 필요하다.

 

적당한 질문을 던지고 결과를 비교하여 좋은 질문을 선택할 수 있는 훈련, 습관이 필요하다.

답이 없거나 시시한 질문과 답을 탐색하는 반복적인 과정은 필연적이다.

이런 지루한 과정을 받아들여야 한다.

 

결론

1. 그럴싸한 질문과 나만의 답을 찾는 과정을 즐기기

2. 보기 좋은 결과물을 끝까지 완성하기

 


- 블로그 글 이쁘게 쓰기 -

· 템플릿 활용하기

youtu.be/ek6wPQ3AHF0

 


https://m.blog.naver.com/recycle1310/221205634462

 

[글잘쓰는법] 블로그에 적합한 글을 쓰는 7가지 원칙

블로그 운영에 대한 관심이 갈수록 높아지는 것 같습니다. 저 역시 강의 때마다 블로그 쓰기의 중요성을 강...

blog.naver.com

1. 짧게 써라

2. 한 주제만 써라

3. 긁어 붙이지 마라

4. 이미지를 넣어라

5. 키워드를 활용하라

6. 디자인에 신경 써라

7. 꾸준히 써라

 


 

- 창의적 질문 -

https://youtu.be/oblBWgjryLo

질문은 창의성에 아주 중요한 요소라고 이야기합니다. 그런데, 질문이 왜 창의성에 중요한 요소라고 하는 걸까요?
질문이 창의성에 아주 중요한 요소인 이유는독립적인 사고를 하게 한다는 점입니다. 
박종하 대표 (박종하창의력연구소 대표)

- 독립적 사고(질문하고 도전하고 자신의 방법을 찾는 것)

- 반대말은 뭘까?

- 남들이 가보지 않은 미지의 영역을 탐색하고 그 결과를 비교하여 더 나은 선택을 찾아내는 것


https://youtu.be/LiKe6guSe8c

 

- 남들이 보지 못한 남들이 찾지 못한 행운의 기회를 찾는 것(많이 도전하고 시도하기)

- 많은 질문을 해봐야 좋은 질문을 안다


 

반응형

'생각' 카테고리의 다른 글

세컨드 브레인  (0) 2022.11.30
개선하려면 분해해서 본질 찾기  (1) 2022.11.03
집중이 힘들고 피곤한 일인가?  (0) 2020.12.02
기계 인공지능 의식의 출발점 질문  (0) 2020.11.24
목표와 현실  (0) 2020.11.19
반응형

20201220

어제는 프로그램을 짜는데 해야 할 일 목록을 작성하고는 옆길로 샛다.

흔들리지 않고 즐거운 마음으로 처음부터 끝까지 몰입해서 프로그램을 완성시키는 방법은?

- 자고 일어났을 때처럼 깨끗해진 마음

- 최근에 입력된 자극, 단어 중 지금 목표와 관련이 적고 예전 관심사와 관련된 것,

당장 실행해야 하는 것은 아니지만 목표와 관련 있다고 유혹하는 것들을 처리하는 법,

우선 순위 정하고 미루는 법

- 코끼리를 생각하지 말아야 할 때 외우는 주문, 걱정거리나 잡념을 지우는 주문, 지금 실천하고 목표하는 것 되뇌기

- 프레임 좋은 습관 태도

- 지루한 그림과 글을 완성하는 힘, 태도, 마음가짐

- 목표와 그에 따른 하위 목표들 세우기

- 우선순위 정리, 정돈, 청소

- 코멘트, 주석과 실행 코드 번갈아 작성

- 주기적인 휴식, 충전, 동기부여, 자극, 명상

 

 


글을 완성하는 방법

https://m.hibrain.net/braincafe/cafes/1001/posts/321/articles/49701

대개 글쓰기를 싫어하는 미숙한 필자들은 일단 글쓰기를 시작해야 하는 단계가 되면 첫 문장을 시작하는 데에 상당한 어려움을 겪는다.

시행착오 전략에 따라 첫 문장을 쓰는 데에 많은 시간을 소비하는가 하면, 대번에 완벽한 초고를 써야 한다는 강박증으로 어려움을 겪기도 한다.

또 자료 수집이나 수집된 자료를 바탕으로 한 메모 없이 글을 써야 하기 때문에 순간순간 떠오르는 생각에만 의존해서 글을 쓸 수밖에 없다.

미숙한 필자들은 대개 글쓰기를 일련의 과정과 절차에 따라 수행하기보다는 글을 쓰는 데에 거의 시간을 들이지 않으면서 앉은 그 자리에서 떠오르는 생각을 중심으로 글을 완성해 버린다.

항상 시간에 쫓겨서 글쓰기를 시작하기 때문에 글을 꼼꼼히 고쳐 쓰는 경우가 거의 없으며 대개 초고가 그대로 제출본이 된다.

능숙한 필자의 쓰기 과정

- 글쓰기 과정 자체를 일련의 목표 지향적 활동으로 파악한다.

- 작업 구상 단계부터 자기 나름대로 목표 의식을 가지고 글의 핵심적 주제를 설정하고 이를 중심으로 사고의 흐름을 전개해 나간다.

- 일단 글쓰기의 주제와 방향이 잡히면 충분한 시간을 두고 일찌감치 글쓰기 과정에 착수하여 계획하기 단계에 많은 시간과 공을 들인다.

- 주제와 관련된 충분한 자료를 전략적으로 찾아서 읽고 이를 바탕으로 틈틈이 메모를 하고 개요를 작성한다.

- 머릿속에 있는 막연한 사고를 자료를 찾아서 읽어 나가는 과정을 통해서 더욱 구체화하는 것이다.

- 전략적인 사고를 하고 이를 바탕으로 글의 가닥을 잡아 나간다.

- 첫 문장을 어떻게 써야 할까를 고심하기보다는 고쳐 쓰기 단계를 염두에 두고 글에서 해야 할 이야기들의 내용을 중심으로 일단 초고 형태로 글을 쓴다.

- 글의 개요와 메모에 의지해서 글을 쓰기 때문에 글이 좀처럼 원래 목표했던 중심 생각에서 벗어나 엉뚱한 방향으로 나아가지 않는다.

- 능숙한 필자들은 계획하기 단계 못지않게 고쳐 쓰기 단계에 많은 시간을 들인다.

- 의미 구성 행위를 본질로 하는 글쓰기 능력은 단순히 의미를 문자 언어로 표현하고 전달하는 차원을 넘어서서 쏟아져 나오는 정보를 처리하고 이를 바탕으로 유용한 지식을 새롭게 창출해 내는 지식 생산 능력의 의미까지도 포함

- 표현 능력의 하나인 글쓰기 능력은 자신의 생각을 논리적인 언어로 정확하고 설득력 있게 전달할 수 있는 의사소통 능력일 뿐만 아니라 사고를 언어로 옮겨서 표현해 내는 고등 정신 기능을 바탕으로 하는 고차원적인 문제 해결 능력이라 할 수 있다.


리펙토링(일단 쓰고, 고쳐 쓰기)

프로그램 구조

- 입력. 변수 세팅

- 처리. 자동선택

- 출력. 다듬기

프로그램 작성 규칙

- 타인과 미래에 재활용하고 유지 보수할 자신을 위해

문법, 형식에 맞게 이쁘게 잘 짜자

- 꼼꼼하게 코멘트, 주석 달기

- 중간중간 오류 체크 추가

 

- 일단 즐겁게 프로그래밍하기, 과정과 일을 즐기기

- 넘어지는 것에 대한 두려움 없이 자신감 있게 시작하기

- 마주하는 수많은 오류와 난관은 당연한 것이므로 스트레스받지 말고 극복하기

- 원하는 것을 찾는 끈질긴 질문과 아이디어로 목표하는 기능 구현 달성하기

- 기능에 맞고 누가 봐도 보기 좋고 이쁜 디자인 찾기

1. 질문하고, 찾고, 선택하기 반복

2. 목표에 따른 하위 목표와 중간 결과물을 완성하는 성취감 반복

3. 모으고, 정리, 정돈, 청소, 비우고 버리기 반복


https://hoonihoon.tistory.com/entry/1-%EB%A6%AC%ED%8E%99%ED%86%A0%EB%A7%81%EC%9D%B4%EB%9E%80

 

1. 리펙토링이란?

- 소프트웨어를 보다 쉽게 이해할 수 있어야 하고, 동작 변화 없이 내부 구조를 변경하는 것.

2. 리펙토링의 목적?

- 프로그램을 빨리 작성할 수 있도록 도와준다.

- 코드 디자인을 개선해준다.

- Bad code -> Good code

3. Bad code 란?

같은 작업을 위해 더 많은 코드 사용, 중복이 많고 이해하기 어렵다.

유지 보수하기에도 어려운 코드.

4. 리펙토링은 언제 하는가?

틈틈이 계속, 기능 추가할 때, 버그 수정할 때, 코드 검토 시에.

5. 리펙토링을 할 수 없을 때는?

1) 디자인 실수가 있어 마음대로 리펙토링을 할 수 없을 때

2) 현재 설계된 구조가 보안 문제, 퍼포먼스 문제 등 중요사항으로 리펙토링을 기대할 수 없을 때.

3) 코드가 처음부터 작성하는 게 나을 정도로 엉망인 경우

4) 현재 코드가 작동하지 않을 경우

5) 마감일이 가까울 경우.

6. 리펙토링 할 나쁜 코드는 왜 발생하는가?

- Copy & paste에 의해 중복 코드 발생.

- 잘못된 변수명, 함수에서 발생. (일관성이 중요 add, register, put, create )

- 특정 클래스 내의 메서드가 동작을 하기 위해 다른 클래스에 있는 정보를 많이 필요로 한경우 ( 메서드를 이동한다.)

- 나쁜 주석

- 너무 긴 메서드, 파라미터

7. 어떤 식으로 리펙토링을 시작해야 되는가?

- 찾기 쉬운 것부터 한다.

- 측정할 수 있는 것 (주석, 긴 메서드, 거대한 클래스, 긴 매개변수)

- 메서드가 하는 일 설명, 블록이 하는일 설명

 


 

python 리펙토링

 

https://python-guide-kr.readthedocs.io/ko/latest/writing/style.html

코드 스타일 — The Hitchhiker's Guide to Python

명쾌한 코드 파이썬으로 어둠의 마법을 부릴 수 있다면, 가장 명쾌하고 간단한 방법을 추천합니다. 나쁜 예 def make_complex ( * args ): x , y = args return dict ( ** locals ()) 좋은 예 def make_complex ( x , y ): return { 'x' : x , 'y' : y } 위의 좋은 코드 예시에서 x와 y는 호출자로부터 직접 값을 받아와 곧바로 딕셔너리로 반환합니다. 이 함수를 쓰는 개발자들은 첫 줄과 마지막 줄을 읽는 것만으로 무엇을 하는 함수인지 정확히 알 수...

python-guide-kr.readthedocs.io

http://pythonstudy.xyz/python/article/511-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%94%A9-%EC%8A%A4%ED%83%80%EC%9D%BC

예제로 배우는 파이썬 프로그래밍 - 파이썬 코딩 스타일

파이썬 코딩 스타일 PEP 8 파이썬 코딩 스타일 Python Enhancement Proposal 8 (PEP 8)은 파이썬 코딩 스타일에 대한 가이드를 제시하고 있다. PEP 8은 2001년 귀도 반 로썸에 의해 처음 제안되었으며, python.org 의 PEP 링크에 자세히 소개되어 있다. 파이썬 프로그래머들은 일반적으로 이러한 PEP 8 코딩 스타일에 따라 프로그래밍을 하고 있는데, 이러한 일관된 코딩 스타일을 적용하는 것은 자신의 코드를 명료하게 할 뿐만 아니라 특히 다른 개발자 혹은 커뮤니...

pythonstudy.xyz

반응형
반응형

2020-12-15

도메인 영역 언어

본질적으로 중요한 것은 내가 이해한 것으로 사고하고 설명하기,

도메인에 따라 용어가 다를 수 있고, 듣는 사람에 따라 이해하는 언어와 수준이 다르다.

달을 가리키는 손가락을 보는게 아니라 달을 봐야

MVP

model - process - view

강화학습

reset - step - render

MVVM

model - view - view model

DDD

domain - bounded contexts - entities, aggregates, services - microservices

빅데이터 분석 기사

빅데이터 분석 기획 - 빅데이터 탐색 - 빅데이터 모델링 - 빅데이터 결과 해석

데이터 - 정보 - 지식 - 지혜

시기별 단계별 기능별 영역이 있다

영역끼리 연결되거나 전달되는 것은 형식에 둘러싸인 본질

본질과 형식 둘 다 바뀔 수 있다. 자주 바꾸지 말아야 할 것은 형식(언어, 프로토콜)?

처음 설계할 때 본질의 변화와 추가적인 본질을 수용할 수 있는 형식을 잘 만들자?


DDD

https://medium.com/myrealtrip-product/what-is-domain-driven-design-f6fd54051590

 

도메인 주도 설계로 소프트웨어 만들기

최범균님의 Domain Driven Design 입문 강의 후기

medium.com

도메인 주도 설계에서 도메인이란 우리가 소프트웨어로 해결하고자 하는 문제 영역을 의미합니다.

.

일반적으로 UML(Unified Modeling Language)에서 자주 사용하는 “클래스 다이어그램(Class Diagram)”부터, 필요에 따라 “상태 다이어그램(State Diagram)”이나 “시퀀스 다이어그램(Sequence Diagram)”을 사용할 수도 있고, 아니면 UML이 아닌 다른 방식으로 표현해도 무방합니다.

다만 도메인 모델을 표현할 때 최대한 표현력을 가질 수 있게 단순히 속성만 나열하는 것이 아니라 행위를 통해 도메인 기능을 나타내도록, 그리고 실제로 사용하는 도메인 용어를 사용하도록 해야 합니다.

도메인 객체는 기본적으로 “엔티티(Entity)”와 “밸류(Value)”로 구분할 수 있습니다.

엔티티는 식별성과 연속성을 가지는 객체인데, 좀 더 풀어서 얘기하자면 고유한 식별자로 식별할 수 있으며 자신의 상태와 라이프사이클(Life cycle)을 가지는 도메인 객체입니다.

밸류개념적으로 묶을 수 있는 데이터 집합을 표현합니다. 도메인 주도 설계를 몰랐더라도 자주 들었던 “값 객체(Value Object)”라고 부르는 것이 바로 이것입니다. 밸류를 사용하면 각각의 데이터를 단일로 취급할 때보다 표현력을 향상시킬 수 있습니다.

더불어 엔티티와 밸류의 메서드(행위)로 기능과 제약을 표현하고, 습관적으로 사용하는 setter/getter 메서드는 지양하라고 최범균님이 언급하셨는데,

// case 1

if (order.getStatus() == OrderStatus.DELIVERY_IN_PROGRESS)

{ // ...do something... order.setStatus(OrderStatus.DELIVERED); }

// case 2

if (order.isDeliveryCompletable())

{ // ...do something... order.completeDelivery(); }

저는 case 2가 case 1보다 무엇을 하고자 하는지 그 의도가 비교적 분명하게 느껴지고,

case 2처럼 만든 객체가 도메인 기능을 잘 표현하고 있는 도메인 객체라고 생각합니다.

애그리거트(Aggregate)

도메인 모델은 점차 복잡해지기 마련입니다. 서비스가 자랄수록 도메인 역시 함께 자라기 때문입니다. 이렇게 도메인 모델의 복잡도는 점차 증가하기 마련인데, 이러한 복잡도를 관리하기 위해 도메인 객체들의 묶음이자 집합체인 “애그리거트(Aggregate)”가 필요합니다. 애그리거트를 사용하면 우리가 다루는 도메인 객체를 좀 더 상위 수준으로 추상화할 수 있습니다.

이러한 애그리거트에는 포함된 객체들의 대표가 되는 “애그리거트 루트(Aggregate root)”가 필요합니다. 애그리거트에는 다수의 객체들이 포함되어 있고 이들은 함께 움직이면서 일관성을 유지해야 하는데, 만약 바깥에서 애그리거트 내부의 객체들에게 직접 접근해서 상태나 속성을 변경해버리면 일관성이 깨져버립니다.

따라서 애그리거트 바깥에서 애그리거트에 직접 접근할 수 있는 곳은 오직 애그리거트 루트 뿐이어야 합니다. 애그리거트 루트가 이러한 창구 역할을 하면서 애그리거트에 포함된 객체들의 일관성을 유지할 수 있습니다.

계층형 아키텍처(Layered Architecture)

계층형 아키텍처

계층형 아키텍처에서는 일반적으로 상위 계층이 하위 계층에 의존합니다. 표현 계층은 응용 계층에 의존하고, 응용 계층은 도메인 계층에 의존하는 방식입니다.

DIP(Dependency Inversion Principle)

예를 들어 “배송 알림” 기능은 고수준 모듈의 기능이고, “RDBMS에서 주문의 배송 정보를 조회하고, 주문자에게 메일로 배송 알림 메일을 전송한다”는 저수준 모듈의 기능이라고 할 수 있죠.

흔히 고수준 모듈이 저수준 모듈에 의존하도록 구현하는데, 이 경우 저수준 모듈의 변경이 곧 고수준 모듈의 변경으로 이뤄지곤 합니다.

고수준에서의 “배송 알림” 자체에 변경이 없어도, 저수준인 “메일로 배송 알림 메일을 전송한다”라는 저수준의 기능이 “SMS로 배송 알림 메시지를 전송한다”로 바뀐다면 고수준 모듈에서도 변경이 발생하는 것이죠.

이러한 단점을 극복하기 위해 의존 관계를 역전시켜서 저수준 모듈이 고수준 모듈에 의존하도록 구현하는 것 DIP(Dependency Inversion Principle)라고 합니다.

저수준 모듈이 고수준 모듈을 의존

“배송 알림” 기능을 정의한 “배송 알리미” 인터페이스를 만들고, 저수준 모듈에서 “배송 알리미” 인터페이스를 구현한 저수준 모듈인 “메일 배송 알리미”나 “SMS 배송 알리미”를 만드는 것이죠.

이렇게 저수준 모듈이 고수준 모듈에 의존하도록 바꾸면 저수준 기능인 “메일로 배송 알림 메일을 전송”하던 것이 “SMS로 배송 알림 메시지를 전송”하는 것으로 바뀌더라도 고수준 모듈에서의 변경은 최소화할 수 있습니다.

이때 한 가지 주의사항이 있는데, DIP를 적용하는 목적은 고수준 모듈이 저수준 모듈에 의존하지 않고 반대로 저수준 모듈이 고수준 모듈에 의존하게 하려는 것이기에, 인터페이스를 도출할 때 저수준 모듈의 관점에서 도출하면 안 된다는 것입니다.

응용 서비스(Application service)

응용 서비스(Application service)”는 도메인 객체를 이용하여 사용자의 요청에 알맞는 기능을 처리하고 결과를 반환하는 역할을 합니다. 표현 계층과 도메인 계층을 연결해주는 일종의 창구 역할이라고 볼 수 있습니다.

응용 서비스는 응용 계층에 속하기 때문에 도메인과 관련된 로직이 직접적으로 포함되지 않아야 합니다. 대신 도메인 계층에 포함된 도메인 객체들을 사용하여 도메인 기능을 처리하면서 흐름을 제어합니다. 이렇게 처리 흐름을 제어하는 역할을 하다보니 응용 서비스의 기능은 종종 트랜잭션의 단위가 되기도 합니다.

또한 응용 서비스는 표현 계층에 의존하지 않아야 합니다. 예를 들면 표현 계층의 기술인 HTTP 프로토콜에 대한 것(HttpSession, MultipartFile 등)은 응용 서비스에서 사용되지 않도록 해야 합니다.

응용 서비스의 전형적인 구현을 보자면,

1. 리포지터리로 사용할 도메인의 애그리거트 루트를 구하고,

2. 애그리거트 루트의 도메인 기능을 실행하고 처리 흐름을 제어하면서,

3. 처리 결과를 반환합니다.

응용 서비스에 대해서 최범균님이 언급하신 내용 중 하나는 “응용 서비스의 메서드 파라미터로 필요한 값들을 넘기는 대신 도메인 객체 자체를 넘기는 것은 최대한 지양하자”, 였습니다. 응용 서비스의 메서드 파라미터로 도메인 객체를 사용하다보면 도메인 객체에 원래는 필요하지 않던 속성들을 추가하기 마련이고, 이러한 속성들을 영속화에서 제외하는 경우 이를 위해 별도의 설정을 하는 등의 문제를 야기할 수 있기 때문입니다. 따라서 메서드 파라미터로 도메인 객체가 딱 들어맞는 경우에만 사용할 것을 권장하셨습니다.

또 하나 고민해볼 수 있는 내용으로는 “응용 서비스의 결과로 도메인 객체를 반환하는 것과 조회 전용 객체를 반환하는 것 중 어떤 것이 좋을까”, 입니다. 물론 각자 팀의 표준이나 구현 편의성, 성능 등 여러가지 상황을 고려하면 절대적인 답은 없겠지만 별도의 조회 전용 객체를 만들어 반환하는 편을 추천해주셨습니다.

리포지터리(Repository)

리포지터리(Repository)”는 애그리거트의 영속성을 처리하기 위해 사용합니다.

리포지터리는 애그리거트 루트 단위로 존재해야 합니다. 애그리거트는 그 자체로 하나의 완전한 집합체이기 때문입니다. 따라서 영속화할 때 애그리거트 루트인 객체뿐만 아니라 애그리거트에 포함된 모든 객체를 함께 영속화해야 합니다. 물론 애그리거트를 저장소에서 조회하는 경우에도 애그리거트 루트와 애그리거트에 포함된 객체들을 전부 가져와야 하며, 삭제하는 경우도 마찬가지입니다.

따라서 “주문 애그리거트”가 있고 애그리거트 루트가 주문 객체라면, 주문 객체에 대한 리포지터리를 만들면 됩니다. 주문 애그리거트에 포함된 다른 객체인 “배송”이나 “주문 상품”, “주문자” 각각에 대해서 리포지터리를 만들 필요는 없습니다. 주문 리포지터리가 주문 애그리거트 전체의 영속성을 관리해주니까요.

최범균님은 JPA의 리포지터리를 사용하여 엔티티 객체를 로딩할 때 연관된 객체들을 기본적으로 EAGER 로딩하고, 필요한 경우에만 LAZY 로딩을 사용하기를 언급하셨습니다.


DDD

1. https://docs.microsoft.com/ko-kr/azure/architecture/microservices/model/domain-analysis

- 애플리케이션의 기능 요구 사항을 이해하기 위한 비즈니스 도메인 분석부터 시작합니다. 이 단계의 결과는 비공식적인 도메인 설명으로, 보다 공식적인 도메인 모델 세트로 구체화할 수 있습니다.

- 다음으로 도메인의 경계가 있는 컨텍스트 를 정의합니다. 각각의 제한된 컨텍스트에는 큰 애플리케이션의 특정 하위 도메인을 나타내는 도메인 모델이 포함됩니다.

- 제한된 컨텍스트 내에서 전술적 DDD 패턴을 적용하여 엔터티, 집계 및 도메인 서비스를 정의합니다.

- 이전 단계의 결과를 사용하여 애플리케이션에서 마이크로 서비스를 식별합니다.

제한된 컨텍스트 정의

도메인 모델은 현실 세계에 존재하는 항목 — 사용자, 드론, 패키지 등의 표현을 포함합니다. 그렇다고 해서 시스템의 모든 부분에서 동일한 항목에 대해 동일한 표현을 사용해야 한다는 것은 아닙니다.

예를 들어 드 론 복구 및 예측 분석을 처리 하는 하위 시스템은 유지 관리 기록, 진행 중, 연령, 모델 번호, 성능 특성 등 드 론의 여러 물리적 특성을 나타내야 합니다. 그러나 배달 예약에서는 그러한 특징을 고려하지 않습니다. 예약 하위 시스템은 드론의 가용 여부와, 수거 및 배달의 ETA를 알기만 하면 됩니다.

이 두 하위 시스템 모두에 대해 하나의 모델을 만들려고 하면 불필요하게 복잡해질 것입니다. 시간이 흘러 이 모델을 확장하게 되면 변경 사항이 개별 하위 시스템을 담당하는 여러 팀을 만족시켜야 하기 때문에 더 어려워집니다. 따라서 동일한 현실 세계 엔터티(이 경우 드론)을 두 가지 다른 컨텍스트에 표현하는 별도의 모델을 설계하는 것이 더 나은 경우가 종종 있습니다. 각 모델은 특정 컨텍스트 내에서 관련된 기능 및 특성만 포함합니다.

이 경우 바인딩된 컨텍스트의 DDD 개념이 재생 됩니다. 제한된 컨텍스트는 단순히 특정 도메인 모델이 적용되는 도메인 내의 경계입니다. 이전 다이어그램을 살펴보면 다양한 기능이 단일 도메인 모델을 공유하는지의 여부에 따라 기능을 그룹화할 수 있습니다.

경계가 있는 컨텍스트가 반드시 서로 격리될 필요는 없습니다. 이 다이어그램에서 경계가 있는 컨텍스트를 연결하는 실선은 경계가 있는 두 컨텍스트가 상호 작용하는 지점을 나타냅니다. 예를 들어 배송은 고객 정보를 가져오기 위해 사용자 계정을, 선단에서 드론을 예약하기 위해 드론 관리를 사용합니다.

Domain Driven Design 책에서 Eric Evans는 다른 경계가 있는 컨텍스트와 상호 작용할 때 도메인 모델의 무결성을 유지 관리하기 위한 여러 가지 패턴을 설명합니다. 마이크로 서비스의 기본 원칙 중 하나는 서비스가 잘 정의된 API를 통해 통신하는 것입니다. 이 방법은 Evans가 개방형 호스트 서비스와 게시된 언어라고 칭한 두 패턴에 해당합니다. 개방형 호스트 서비스란 하위 시스템이 다른 하위 시스템과의 통신을 위한 공식 프로토콜(API)를 정의하는 것입니다. 게시된 언어는 다른 팀이 클라이언트를 작성하는 데 사용할 수 있는 양식으로 API를 게시하여 이러한 개념을 확장합니다. 마이크로 서비스용 Api 디자인문서에서 openapi 사양 (이전의 Swagger)을 사용 하 여 JSON 또는 yaml 형식으로 표현 된 REST api에 대 한 언어에 관계 없는 인터페이스 설명을 정의 하는 방법을 설명 합니다.

2. https://docs.microsoft.com/ko-kr/azure/architecture/microservices/model/tactical-ddd

전술적 패턴 개요

이 섹션에서는 전술적 DDD 패턴에 대한 간략한 개요를 제공하므로 이미 DDD에 익숙하다면 이 섹션을 건너뛸 수 있습니다. 패턴은 Eric Evans의 책 5 – 6장과, Vaughn Vernon의 Implementing Domain-Driven Design(DDD 구현) 에서 더 상세히 설명합니다.

엔터티. 엔터티는 시간이 지나도 지속되는 고유의 ID가 있는 개체입니다. 예를 들어 뱅킹 애플리케이션에서 는 고객과 계좌가 엔터티입니다.

엔터티에는 엔터티를 조회하거나 검색하는 데 사용할 수 있는 고유의 식별자가 있습니다. 식별자가 항상 사용자에게 직접 노출되는 것은 아닙니다. 데이터베이스의 GUID 또는 기본 키가 될 수 있습니다.

ID는 여러 경계가 있는 컨텍스트를 포괄할 수 있고 애플리케이션의 수명을 넘어설 수 있습니다. 예를 들어 은행 계좌번호나 정부 발급 ID는 특정 애플리케이션의 수명 주기에 종속되지 않습니다.

엔터티의 특성은 시간이 지나면서 변화할 수 있습니다. 예를 들어 사용자 이름 또는 주소는 변경될 수 있지만 여전히 같은 사람입니다.

엔터티는 다른 엔터티에 대한 참조를 포함할 수 있습니다.

값 개체. 값 개체에는 ID가 없습니다. 해당 특성의 값으로만 정의됩니다. 값 개체도 변경할 수 없습니다. 값 개체를 업데이트하려면 항상 새 인스턴스를 만들어 기존 인스턴스를 대체합니다. 값 개체는 도메인 논리를 캡슐화하는 메서드를 갖을 수 있으나 이러한 메서드는 개체의 상태에 부작용을 주지 않아야 합니다. 값 개체의 대표적인 예로 색, 날짜 및 시간, 통화 값 등이 있습니다.

집계. 집계는 하나 이상의 엔터티에 대한 일관성 경계를 정의합니다. 한 집계에서 정확히 한 엔터티가 루트입니다. 조회는 루트 엔터티의 식별자를 사용하여 수행됩니다. 집계의 다른 엔터티는 루트의 자식 요소로, 루트의 다음 포인터에서 참조합니다.

집계의 목적은 트랜잭션 고정 항목을 모델링하는 것입니다. 현실은 매우 복잡한 관계로 얽혀있습니다. 고객이 주문을 접수하고, 주문에는 제품이 포함되어 있으며, 제품을 제공하는 공급자가 있는 등 이와 같은 관계가 계속 이어집니다. 애플리케이션이 몇 가지 관련 개체를 수정하는 경우 일관성을 어떻게 유지하나요? 고정 항목을 어떻게 추적하고 적용할까요?

전통적 애플리케이션에서는 데이터베이스 트랜잭션을 사용하여 일관성을 적용하는 경우가 종종 있었습니다. 그러나 분산형 애플리케이션의 경우 현실성이 떨어지는 경우가 많았습니다. 단일 비즈니스 트랜잭션이 여러 데이터 저장소에 걸쳐 있거나, 오래 실행되거나, 타사 서비스와 관련될 수 있습니다. 궁극적으로 이것은 데이터 계층이 아니라 도메인에 필요한 불변 항목을 시행하는 애플리케이션에 달려 있습니다. 이것이 집계가 모델링에서 갖는 의미입니다.

참고 집계는 자식 엔터티 없이 단일 엔터티로 구성될 수 있습니다. 집계를 만드는 것은 트랜잭션 경계입니다.

도메인 및 애플리케이션 서비스. DDD 용어에서 서비스란 상태를 유지하지 않고 일부 논리를 구현하는 개체입니다. Evans는 도메인 논리를 캡슐화 하는 도메인 서비스 와 사용자 인증 또는 SMS 메시지 전송과 같은 기술 기능을 제공 하는 응용 프로그램 서비스 를 구분 합니다. 도메인 서비스는 종종 여러 엔터티를 포괄하는 동작을 모델링하는 데 사용됩니다.

참고 서비스 라는 용어는 소프트웨어 개발에서 범위가 넓습니다. 여기에서는 그 정의가 마이크로 서비스와 직접적인 연관이 없습니다.

도메인 이벤트. 도메인 이벤트는 변경이 있을 때 시스템의 다른 부분에 이를 알리는 데 사용됩니다. 이름에서 알 수 있듯이 도메인 이벤트는 도메인 내의 이벤트를 나타내야 합니다. 예를 들어 "테이블에 레코드가 삽입"되는 것은 도메인 이벤트가 아닙니다. "배달 취소"는 도메인 이벤트입니다. 도메인 이벤트는 마이크로 서비스 아키텍처에서 특히 관련이 있습니다. 마이크로 서비스는 분산되고 데이터 저장소를 공유하지 않으므로, 도메인 이벤트를 통해 마이크로 서비스에서 서로 조정할 수 있습니다. 서비스 간 통신 문서에서는 비동기 메시징에 대해 자세히 설명 합니다.

DDD Aggregate

https://medium.com/@SlackBeck/%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B2%8C%EC%9E%87-%ED%95%98%EB%82%98%EC%97%90-%EB%A6%AC%ED%8C%8C%EC%A7%80%ED%86%A0%EB%A6%AC-%ED%95%98%EB%82%98-f97a69662f63

 

애그리게잇 하나에 리파지토리 하나

필자는 도메인 주도 설계Domain-Driven Design(이하 DDD) 빌딩 블록Building blocks[1]으로 애플리케이션을 구현하면서 엔티티ENTITY[2] 마다 리파지토리REPOSITORY를 만드는 것을 자주 보았는데 자세히 살펴보면…

medium.com

필자는 도메인 주도 설계Domain-Driven Design(이하 DDD) 빌딩 블록Building blocks[1]으로 애플리케이션을 구현하면서 엔티티ENTITY[2] 마다 리파지토리REPOSITORY를 만드는 것을 자주 보았는데 자세히 살펴보면 여러 엔티티를 묶어서 하나처럼 사용하는 경우가 대부분이었다. DDD에서는 이러한 연관 객체의 묶음을 애그리게잇AGGREGATE이라고 정의하고 애그리게잇에 포함된 특정 엔티티를 루트Root 엔티티라고 부른다. 그리고 리파지토리를 만들 때 애그리게잇 루트 엔티티에 대해서만 리파지토리를 제공하라고 한다.

이 글은 주문 도메인 예시를 통해 애그리게잇이 무엇인지 알아보고 왜 애그리게잇 루트에 대해서만 리파지토리를 제공해야 하는지에 대해 설명한다.

OrderService에 비즈니스 규칙을 구현함에 따라 OrderService는 Order 뿐만 아니라 연관된 LineItem, OrderPayment, ShippingAddress을 함께 참조하고 있다. 이런 경우 Order를 사용할 때 늘 비즈니스 규칙을 머릿속에 넣어두고 코딩해야 한다. 이 글에서는 이해를 위해 Order를 단순화했지만 실무에서는 Order는 훨씬 더 복잡한 연관 관계와 속성을 가진다. 복잡한 연관 관계를 가지는 Order를 모두 파악하고 사용하는 것은 쉬운 일이 아니다.

DDD의 저자 에릭 에반스Eric Evans는 “모델 내에서 복잡한 연관 관계를 맺는 객체를 대상으로 변경의 일관성을 보장하기란 쉽지 않다. 그 까닭은 단지 개별 객체만이 아닌 서로 밀접한 관계에 있는 객체 집합에도 불변식이 적용돼야 하기 때문이다.” 라고 말했다. 여기서 불변식Invariants은 데이터가 변경될 때마다 유지돼야 하는 일관성 규칙(비즈니스 규칙)을 뜻한다.

Order, LineItem, ShippingAddress, OrderPayment는 각각이 아닌 하나의 집합으로 다루어야 한다. 에릭 에반스는 이를 애그리게잇AGGREGATE으로 정의한다.

모델 내의 참조에 대한 캡슐화를 추상화할 필요가 있다. AGGREGATE는 우리가 데이터 변경의 단위로 다루는 연관 객체의 묶음을 말한다.

각 AGGREGATE에는 루트(root)와 경계(boundary)가 있다.

경계는 AGGREGATE에 무엇이 포함되고 포함되지 않는지를 정의한다.

루트는 단 하나만 존재하며, AGGREGATE에 포함된 특정 ENTITIY를 가르킨다.

경계 안의 객체는 서로 참조할 수 있지만, 경계 바깥의 객체는 해당 AGGREGATE의 구성요소 가운데 루트만 참조할 수 있다.

— 도메인 주도 설계, 131쪽

애그리게잇에 포함된 특정 엔티티를 루트 엔티티라고 한다고 했다. Order, LineItem, ShippingAddress, OrderPayment 중 어떤 것이 루트 엔티티일까?

DDD에서는 루트 엔티티는 전역 식별성Global identity을 지닌 엔티티라고 말한다. 필자는 전자 상거래 사이트에서 주문 파트 개발자로 일한 적이 있다. 콜 센터나 상품 파트, 회원 파트와 협업할 일이 매우 많았는데 대부분 사람들이 주문 번호를 말하며 의사소통했다. 필자가 보기에는 이것이 바로 전역 식별성이다.

또한, 안영회 님은 상품 정보 다룰 때 BoundedContext 와 엔터티 글에서 애그리게잇을 언급하며 아래처럼 말했다.

이런 경우는 조회 작업의 주체로 쓰이는 엔터티와 그렇지 않은 엔터티가 존재할 수 있습니다.

DDD의 또 다른 빌딩블록인 Aggregate 가 떠오르는 지점입니다.

멋진 표현이다. “주체로 쓰이는 엔티티와 그렇지 않는 엔티티” 루트 엔티티는 주체로 쓰이는 엔티티이다.

결론적으로 이 글에서는 Order가 루트 엔티티가 될 수 있다.


빅데이터 분석 기사

빅데이터 분석 기획 - 빅데이터 탐색 - 빅데이터 모델링 - 빅데이터 결과 해석

데이터 - 정보 - 지식 - 지혜

1) 데이터(Data) : 가공하기 전, 관찰 수집한 객관적 사실 그 자체, Raw data, Microdata 등으로 불림

2) 정보(Information) : 가공된 데이터, Processed Data / 기술통계(평균 등)는 정보에 해당

3) 지식(Knowledge) : 정보에 기반에 찾은 규칙(if A than B), 패턴이 지식에 해당

4) 지혜(Wisdom) : 지식에 유연성(Flexible)을 추가한 것, 시나리오에 기반에 맥락(Context)이나 상황에 맞게 규칙을 적용하는 것 - 지식의 축적과 아이디어가 결합한 창의적 산물

https://r-book.tistory.com/19

 

[ADsP 자격증] 1-1. 데이터와 정보(데이터-정보-지식-지혜)

제 1과목 데이터 이해 / 1. 데이터의 이해 / 1-1. 데이터와 정보 < 데이터의 정의 > 데이터는 사물, 현상, 사건, 인간관계 등에 관한 관찰 기록이다. 1) 재료, 자료, 논거라는 뜻인 Datum의 복수형 2) 컴퓨터 용어..

r-book.tistory.com

※ 지식 순환 과정(프로세스)

1) 공통화(Socialization) : 암묵지 → 암묵지

2) 표출화(Externalization) : 암묵지 → 형식지

3) 연결화(Combination) : 형식지 → 형식지

4) 내면화(Internalization) : 형식지 → 암묵지

 

 

 

분석 기획

  대상 안다 대상 모른다
방법 안다 Optimization Insight
방법 모른다 Solution Discovery
분석과제발굴

Top-Down

(문제-해결-타당성)

Bottom-Up

(데이터-프로토타입-과제정의)

https://gaiag.tistory.com/37

3-1 데이터 분석 기획의 이해

제 1절 분석 기획 방향성 도출 분석기획 : 실제 분석 수행 전, 수행할 과제의 정의 및 의도했던 결과를 도출할 수 있도록 관리할 사전 방안을 계획하는 작업 어떠한 목표(What)를 달성하기 위해서(Why) 어떤 데이..

gaiag.tistory.com

- 목표 시점 별 분석 기획 방안

- 과제 중심적인 접근 방식 : 과제 단위로 명확한 해결 위해 Quick - Win 방식

- 장기적인 마스터 플랜 방식 : 분석 문화 내재화를 위해 전사적이고 장기적 관점이 바람직함

- 문제해결을 위한 단기적인 접근방식과 분석과제 정의를 위한 중장기적인 마스터 플랜 접근 방식 융합

 

당면한 분석 주제의 해결

(과제 단위)

지속적 분석 문화 내재화

(마스터 플랜 단위)

1차 목표

Speed & Test

Accuracy & Deploy

과제의 유형

Quick-Win

Long Term View

접근 방식

Problem Solving

Problem Definition

- 의미있는 분석 : 분석기술, IT 및 프로그래밍, 분석 주제 도메인 전문성, 의사소통, 마스터 플랜 도출

- 분석가 3가지 기본 역량 + 프로젝트 관리 역량, 리더십 역랑 필요

빅데이터를 분석하기 위한 방법론 : 계층적 프로세스 모델(단계-태스크-스탭)

 

1) 분석 기획

가. 비즈니스 이해 및 범위 실행 : 비즈니스 이해, 도메인 문제점 파악

- 프로젝트 범위 정의서 SOW

나. 프로젝트 정의 및 계획 수립 : 프로젝트 범위 확정 단계, 진행의 기준선 설정

- 데이터 분석 프로젝트 정의 : 목표, KPI 등을 구체화한 정의서 작성, 평가 기준 설정

- 프로젝트 수행 계획 수립 : 수행 계획서 WBS 작성(목적, 배경, 기대효과, 방법, 일정, 조직, 방안 등)

다. 프로젝트 위험 계획 수립 : 인프라 구축 병행, 기존 시스템과 인터페이스 동반 등의 위험 요소

- 데이터 분석 위험 식별 : 산출물, 정리자료, 전문가 판단을 활용 → 위험식별, 우선순위 설정

- 위험 대응 계획 수립 : 위험 관리 계획서 (회피, 전이, 완화, 수용 로 구분된 대응 방안 수립)

 

2) 데이터 준비

가. 필요 데이터 정의 : 모든 사람이 함께 작성

- 데이터 정의 : 다양한 원천 데이터 소스로부터 데이터 정의서 작성

- 데이터 획득방안 수립 : 데이터 수집에 따른 구체적 방안 수립 (내/외부 데이터 획득 방안)

나. 데이터 스토어 설계 : 프로젝트 별로 필요한 데이터 정의하여 전사 차원의 스토어 설계서

- 정형 데이터 : 구조화된 형식, DBMS 사용, 논리적 물리적 설계 구분하여 설계

- 비정형 데이터 : 하둡, NoSQL사용, 논리적 물리적 설계 구분하여 설계

다. 데이터 수집 및 정합성 점검 : 품질 통제와 품질 보증 프로세스 수행

- 데이터 수집 및 저장 : 크롤링 ETL도구, API, 스크립트 프로그램 등 이용, 데이터 스토어 저장

- 데이터 정합성 점검 : 품질점검을 통한 정합성 확보, 보완작업 진행

 

3) 데이터 분석 : 수립된 프로젝트 목표를 달성하기 위해, 적당한 데이터셋이 없음 준비단계 반복 수행

가. 분석용 데이터 준비 : 데이터셋 준비

- 비즈니스 룰 확인 : 프로젝트 목표 확인, 비즈니스 룰 파악

- 정형, 비정형 데이터 추출 → 분석 가능하도록 구조화된 형태로 구성, 작업공간에 분리

나. 텍스트 분석 : 비정형 데이터 존재할 경우, 정형데이터와 통합 모델링 수행

- 텍스트 데이터 확인 및 추출 : 비정형 데이터 데이터 스토어 확인 후 추출

- 텍스트 데이터 분석 : 용어 사전 확보, 텍스트 시각화 도구 활용 의미 전달 명확

다. 탐색적 분석

- 탐색적 데이터 분석 : 기초통계랑 산출, 데이터 자체 특성(중심성, 분포성, 산포성) 기초자료 준비

- 데이터 시각화 : 시스템화를 위한 시각화, 사용자 인터페이스, 프로토타입 활용

라. 모델링 : 가정설정을 통해 통계 모델을 만들거나, 기계학습을 이용한 수행 모델 만드는 것

- 데이터 분할 : 데이터 셋을 훈련용과 테스트용으로 분할, 교차검증, 앙상블 기법 적용

- 데이터 모델링 : 분류, 예측, 군집 등의 모델 만들어 운영 시스템 적용, 통합 모델링 수행

- 모델 적용 및 운영 방안 : 알고리즘 설명서 작성, 의사코드 수준의 상세한 작성 필요, 모니터링

마. 모델평가 및 검증 (모델평가검증서)

- 모델 평가 : 정의서 평가 기준에 따라 객관적 평가, 별도이 데이터 활용해서 분석

- 모델 검증 : 검증용 데이터 이용 모델 검증 작업 실시, 보고서 작성, 실 운영용 데이터로 최종 검증

바. 모델적용 및 운영방안 수립

 

4) 시스템 구현

가. 설계 및 구현 : 소프트웨어 개발 생명주기 SDLC와 기업내 시스템 방법론 커스터마이징하여 적용

- 시스템 분석 및 설계 : 응용시스템 구축 설계 프로세스 진행

- 시스템 구현 : BI 패키징 활용, 운영시스템의 커스터마이징 통해 설계된 모델 구현

나. 시스템 테스트 및 운영 : 운영중인 시스템에 적용하거나 프로토타입을 구현하고자 하는 경우

- 시스템 테스트 : 단위/통합/시스템 테스트 실시, 객관성과 완전성 확보

- 시스템 운영 계획 : 운영자, 사용자를 대상으로 필요한 교육을 실시하고 시스템 운영계획 수립

 

5) 평가 및 전개

가. 모델 발전 계획 수립 : 모델의 생명주기 설정하고 주기적 평가 실시, 업데이트 자동화 방안

- 모델 발전 계획 : 지속적인 운영과 기능 향상을 위한 발전계획 수립, 계속성 확보

나. 프로젝트 평가 및 보고 : 분석 기획 단계의 목적 달성 여부 평가, 자산화 진행

- 프로젝트 성과 평가 : 정량적, 정성적 성과로 나눠 성과 평가서 작성

- 프로젝트 종료 : 최종 보고서 작성, 지식 자산화 실행, 의사소통 절차에 따른 보고

반응형
반응형

20201209

생각은 머리속 언어, 이미지, 소리, 경험에 의해 기억된 객체들, 등이 어우러져서 이루어 지는 듯.

그런데 꿈이나 생각속의 나와 객체들이 어떻게 자율적으로 반응하지?

통계적인 뉴런에 연결돼 있어서?

통계적 뉴런이기 때문에 제어하려면 평소 인풋 기억과 내면의 대화를 잘 관리해야 할 듯

평소에 자기 전 하루의 도전을 정리하고 질문하기

아침에 눈뜨면 어제 과거를 되돌아보고 반성하고 미래를 상상하며 대비하며 생각하기

머신러닝 뉴럴넷도 마찬가지 평가 함수가 질문이고, 학습 데이터를 인풋으로 기억(학습) 만들기.

이것들을 잘 이용해서 인공신경망을 제어하는 것

- 언어 모델이 어떻게 번역 분류 질의 등의 문제를 해결하는가?

- 다이내믹 프로그램을 자동으로 짜게 하려면?

- 핵심 기능 단순한 프로그램이 기능을 추가함에 따라 어떻게 복잡해지는가?


[출처] https://www.kakaobrain.com/blog/118

- 언어 모델이 어떻게 자연어 처리 문제들(번역, 요약, 분류, QnA 등)을 해결하는가?

pretrain -> embedding -> fine tuning

(추천 동영상입니다 음미하시면 꼭 자연어 처리에 한정되지 않고 머신러닝 문제들을 어떻게 해결하는지 프레임을 보실 수 있을 것 같습니다)

https://youtu.be/DaAObh3sGnQ


- 다이내믹 프로그래밍

[출처] https://new93helloworld.tistory.com/220

1 분할 정복 가능

2 작은 문제의 답을 큰 문제에 재활용(이전의 답을 재활용)

위의 동영상에도 이전에 학습한 문장을 벡터로 만들어 검색한다는 내용이 있는데..

https://youtu.be/FmXZG7D8nS4


- 복잡한 프로그램을 어떻게 단순화할지? 추상화, 객체지향(OOP)

https://youtu.be/NcvX9SzUlcs

https://youtu.be/vrhIxBWSJ04

https://youtu.be/eLSlhuwDqF8

5가지 클래스 설계의 원칙(SOLID)

https://www.fun-coding.org/PL&OOP2-1.html

 

파이썬과 객체지향 프로그래밍: 5가지 클래스 설계의 원칙 (S.O.L.I.D) - 잔재미코딩

초간단 연습1 1. SRP 원칙을 고려하여 다음 코드를 클래스로 만들어봅니다. - https://www.seeko.co.kr/zboard4/zboard.php?id=mainnews 웹페이지에서 타이틀과, 댓글 수를 가져오기 - 엑셀 파일로 만들기 생각해보

www.fun-coding.org

python 디자인 패턴

https://www.fun-coding.org/PL&OOP2-2.html

 

파이썬과 객체지향 프로그래밍: 디자인 패턴 - 잔재미코딩

간단히 개념만! 어떤 객체는 하나만 만들면 되는 객체가 있음 - 예: 데이터베이스를 연결하고, 데이터베이스를 제어하는 인터페이스 객체 보통 프로그램은 여러 파일로 구현합니다. 각 파일에서

www.fun-coding.org


반응형
반응형

 

 

 

YOLO(You Only Look Once)

https://www.youtube.com/watch?v=8DjIJc7xH5U

 

YOLOv3: An Incremetal Improvement

https://www.youtube.com/watch?v=HMgcvgRrDcA

 

End-to-End Object Detection with Transformers(DETR)

https://www.youtube.com/watch?v=lXpBcW_I54U

 


 

End to End Object Detection with Transformers:DETR | Kaggle

https://www.kaggle.com/tanulsingh077/end-to-end-object-detection-with-transformers-detr

 

Object Detection with DETR Demo - Google Colab

https://colab.research.google.com/github/facebookresearch/detr/blob/colab/notebooks/detr_demo.ipynb

 


 

 

반응형
반응형

20201202

도서관에서 트레이딩 봇 프로그램을 짜는데 오류가 자주 발생했다.

아마도 체력과 에너지를 아끼려고 건성으로 읽고 생각하고 짜서 그런 것 같다.

그렇다면 과연 몰입하고 집중하는 것이 전력 질주처럼 에너지를 쏟아내는 힘든 일인가?

집중하지 않아서 다시 처리해야 하고 다시 읽어야 하고 오류로 스트레스받는 것이 오히려 낭비이고 힘든 일이 아닐까?

몰입해서 깔끔하게 처리될 때의 상쾌함을 즐길 수 있으면 좋겠다.

그러기 위해선 이것저것 동시에 즐기고 해결하고 싶다는 욕심을 버려야겠다.

뭔가 하나하나에 온전히 쏟아보자 그렇게 하나에 집중하는 것이 몸에 배면 좋겠다.

 

 

문득 며칠 전 아는 동생이 음식을 주문하는 데 한참을 고민하던 것이 생각난다.

아마도 직업이 설계라서 평소 가장 효율적인 결과를 얻기 위해 고민하고 생각을 많이 하는 것이 자연스럽고 습관이 된 것 같다. ^^

직관과 추리, 돈오돈수와 돈오점수처럼 무조건 어느 한쪽만이 옳고 좋은 것은 아니다.

체질적으로 타고난 것일 수도 있고, 평소 살아온 삶의 태도에 대한 결과일 수도 있는 것 같다.

직관적으로 떠오르는 생각을 선택하는 것과 깊고 진중하게 생각하고 고민해서 선택하는 것 둘 다 키워서 때와 상황에 맞게 선택할 수 있으면 좋겠다는 생각이 욕심일까?

 


 

반응형

'생각' 카테고리의 다른 글

개선하려면 분해해서 본질 찾기  (1) 2022.11.03
글쓰기  (5) 2021.01.14
기계 인공지능 의식의 출발점 질문  (0) 2020.11.24
목표와 현실  (0) 2020.11.19
스타트업에서 지분을 나누는 현명한 방법  (0) 2020.10.23
반응형

실전(Kaggle, Dacon)으로 배우는 머신러닝

- Python, 머신러닝 초보 책이나 강좌에서 너무 많이 시간을 보내지 마세요. 바로 실전에서 배우세요.

- 좋은 강좌나 코드를 보면서 따라 해보세요.(따라 하는데도 문제가 발생합니다. 좌절하지 마세요.)

- Python, Tensorflow, Torch 등은 도구입니다. 간단한 사용법을 아신다면 많이 사용해보세요. 저절로 익혀집니다.

- 빨리 익숙해지고 배워야 할 것은 언제나 문제가 발생한다는 것과 그 문제에 좌절하지 않고 해결책을 찾아내는 방법입니다.

아무리 많이 준비를 하고 시작해도 실전에서는 문제가 발생합니다.

물론 많이 준비하시면 오류와 시행착오를 줄일 수 있겠죠.

배우는 동안은 별로 문제가 없겠죠?

실전에 어떤 문제가 발생하지도 모르면서 언제까지나 준비만 하실 건가요?

- 우린 답을 찾을 것이다.(인터스텔라)

구글 Colab 소개 및 기본 사용법 꿀팁 정리

캐글 (Kaggle) 소개 - 데이터 과학 (머신러닝) 실전 예제 / 캐글 - 타이타닉 생존자 예측하기

듣기 좋은 여성분 목소리에 깔끔하고 따라 하기 쉬운 강의 (단점은 유료 강좌로 옮기신 뒤 삭제된 동영상이 많네요..)

데이콘 Playlist


구글 Colab 소개 및 기본 사용법 꿀팁 정리

https://youtu.be/v19SzGMOd2c

 

캐글 (Kaggle) 소개 - 데이터 과학 (머신러닝) 실전 예제

https://www.youtube.com/watch?v=9GWb9yNcsvc&list=PLVNY1HnUlO25B-8Gwn1mS35SD0yMHh147

 

듣기 좋은 여성분 목소리에 깔끔하고 따라 하기 쉬운 강의(단점은 유료 강좌로 옮기신 뒤 삭제된 동영상이 많네요..)

https://www.youtube.com/c/todaycode/playlists

 

todaycode오늘코드

공공데이터 분석 데이터 시각화 캐글을 통한 머신러닝/딥러닝 튜토리얼 Pandas, Numpy, Scipy, scikit-learn, TensorFlow, Keras, Jupyter, Colaboratory

www.youtube.com

 

데이콘 Playlist

https://www.youtube.com/channel/UCo1vJRg2ANyaVHV1A98MQNA/playlists

 

데이콘

© 2020 Google LLC CEO: 선다 피차이 주소: 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA. 전화: 080-822-1450(무료)

www.youtube.com

 

반응형

+ Recent posts