비선형 회귀 모델(상호작용모델)의 경우에는 만일 선형회귀식내에 다뤄야할 피쳐수가 너무 너무 많은경우에는 이러한 경우에 설명이 잘 되지 않는다. 비선형 회귀모델에서 이러한 방법을 대체할 수 있는 방법이 Partition이다. 이렇게 나누는 과정을 계속계속 나누다는 과정을 recursive partitioning이라고 부른다. 

예측 나무는 나무를 이용하여 나누는 과정을 표현한다. 나무의 Terminal node와 leaves는 각 파티션의 한 부분을 의미한다. 위에서부터 각 x들이 어디에 속할지를 파악하기위해 root node부터 시작한다. 그리고 피쳐에 대해서 계속 질문을 해나가서면서 if else 형식으로 분류해 나간다.  또한 이러한 변수들은 모두가 같은 데이터타입의 형식이 아니어도된다. 어떤것은 연속형범수(비율척도)여도 되고, 어떠 것은 이산형이나, 순서형, 명목형이어도 상관이 전혀없다. 각 분류를 하기 위해 질문을 해나가는 과정만 잘 진행되면된다.

 


 

Decision trees 

보통, 의사결정나무라고하면, Classification tree을 의미한다. 그러나, Regression tree을 의미하는 경우도 있는데, 두 차이를 이해할 필요도 있다. 첫번째 차이는 사용하는 변수의 척도에 따라서 나눌 수 있다. 회귀트리는 연속형 변수를 사용하는 반면, 분류트리는 연속형 변수를 사용할 떄 이용된다. 이 변수는 독립변수와 종속변수 둘 다 해당된다. 또한 사용하는 알고리즘에서도 차이가 있는데, 분류트리는 대표적인 ID3 알고리즘과 같이, 지니 지수와 엔트로피의 개념으로 분류를 양적으로 계산한다. 한편, 회귀트리는 연속형 변수이기 때문에, 클레스(Class)을 나눌 수 없는데, 따라서 관측한 값과 만든 예측모델에서의 RSS을 계산하여 모델링한다.

 


Classification tree이를 세부적으로 알아보기 위해 아래의 몇 가지를 알아보자.

 

ID3 Algorithm (decision tree에 적용할 수 있는 알고리즘)

Decision tree에서 ID3는 entropy를 이용한 알고리즘인데 다음과 같은 방식으로 모델이 작동한다.
1. 현 Node를 나눌 가장 적절한 피쳐A를 찾는다. (=Root Noded을 찾는다)회귀트리에서는 RSS가 가장 많이 감소할 수 있는 feature을 찾고, 분류트리에서는 Entropy와 Information Gain (in ID3)을 이용한다.

그러면, 어떤게 가장 적절한 피쳐A인지 궁금해할 것이다. 이를 위해, ID3 알고리즘에서는 metric을 만들어서 사용하는데 (측정할 수 있는 모델), entropy라는 개념을 이용해서 사용한다. 실제로는 entropy와 Information gain을 이용한다. 참고로 ID3는 leaf node가 pure한 상태가 되도록 알고리즘이 수행되기 때문에, 오버피팅 문제가 발생할 수 있다.

 

불순성을 측정하는 방법은 Entropy, Gini ,Classifcaion error로 계산 할 수 있다.

 

불순도의 측정

1. Entropy

복잡도. 열역학 2법직이란 자연현상은 항상 엔트로피가 증가하는 방향으로 일어난다. 예를 들어, 여러 과자를 봉투에 튿어서, 한 봉투에 넣고, 집까지에 돌아다니게되면, 과자가 다섞여있을 것이다. 이러한 개념이 복잡도이다. 이런 개념으로, 엔트로피가 높다는 것은 복잡도가 높다는 것이다. 

 

 

 

(사진출처 : https://www.youtube.com/watch?v=9r7FIXEAGvs)

 

엔트로피의 정의는 아래의 식과 같다. 이거는 이항분포(Binary distribution)처럼 p2 = 1- p1 같은데, 즉 p1 (2가지로만 가정했을 때)

아래의 식을 보면, 엔트로피는 확률이 0.5일 때, 가장 높은데, 이 말은 그룹내에 종류가 50: 50으로 있다는 말이고, 종류가 1:0 혹은 0:1일 때, 가장 pure하여 엔트로피가 0인 것이다. (퓨어한 리프까지 갔다면, 엔트로피가 0이다. = 같은 속성인 요소끼리 놓았다). 즉 우리는 한 잎(leaves, region)안에는 동질성이 있는 그룹으로 나누길 원하기때문에, 엔트로피가 최소인 선택을 애햐한다. 분류트리에서는 이러한 엔트로피가 가장 크게 감소하는 속성을 베스트 속성으로 찾는다.

 

 

 

 

 

 Information Gain

위의 엔트로피의 계산에서, 이렇게 엔트로피가 감소하는 정도를 측정하는 방법(Metric)이 있는데, 이 방법 중 하나가 information Gain이다 . Gain(S,A) 의 의미는 피쳐 A로 나눔으로써 얻게되는 엔트로피의 감소이다. 따라서, 엔트로피의 감소가 큰 피쳐를 찾아야하기 때문에, Gain이 큰 값을 찾아야 한다. (즉= 어떤 feature로 나눌건인지에 대해 계산을 해야하는데 Inforamtion gain으로 계산해볼 수있다.)

 

(S는 데이터세트, A는 나눌 속성, H(S) 나누지 않았을 때의 엔트로피, - Sv는 그룹에 속해있는 요소의 크기(수), S는 나누기전의 수) 

따라서, 여러 속상에 대해서 information Gain을 다 계산해서, 가장 많은 Gain을 가져다 줄 수 있는 속성을 우리가 찾는 피쳐이다.

 

 

2. Gini index

또 다른 방법 중 하나는 지니 계수이다. 지니 계수는 엔트로피랑 유사하게 불순성(impurity)을 측정하는 방법이다. 즉 지니계수가 클수록 여러종류의 요소들이 한 노드에 있는 것이다. 이 말은, 제대로 분류가 안되었다는 말과 같다. 식은 아래와 같다. 작관적으로 이해하기위해서 아래 식에서, 1번 분류하는데 모두 같은 종류라고, 생각하면 지니는 0이다. 즉 완벽하게 분류되면 0, 점점 섞이면 섞일수록 커진다. (Pk는 각 인스턴스들이 k클레스에 속하는 비율이다. 50개중에 25개가 클레스 1에 속한다면 1/4에 해당한다)

 

 

Classification Error
지니 계수와 p을 구하는 것은 똑같은데, 다만 뒤의 합산의 값보단 최대값을 구해서 계산한다.
 

 

 

2. A를 현재 Node(Region)의 decision attribute을 적용한다3. A의 가능한 값들에 대해, 현 node의 child node들을 각각 하나씩 만든다. (Split)4. 현 Node에 들어있는 training exmaple 들을 각 A값에 따라 child node에 넣는다. (Split)5. Child node에 대해 node가 Pure하면 멈추고(, 그렇지 않으면 child node부터 계속 반복한다

 

풀어서 예시를 들면, 독립변수에 대해서 변화할 수 있는 값들에 대해서 나눌 수 있는 지점?들을 찾고 나눈다(Split point라고 한다). 그러면 각 영역은 겹치지 않는 영역으로 생각할 수 있다. 그리고나서 그 분류지점에 따라, 모든 관측된 변수들을 각각의 영역에 배치시킨다. 예를 들어 수학점수라고 할 때, 보충반 의 수학평균이 60, 그리고 다른 심화반의 수학점수의 평균이 80인 클래스가 있다고하자. 그리고 어떠한 새로운 사람이 들어왔을때, 그 사람이 첫번째 반에 속한다면, 이 사람의 점수가 60점이라고 예측하고, 만일 심화반에 속한다면 80점에 속한다고 보는 것이다. 즉 구역에따라서 점수를 나누는 것이다. 

 

 

 
 
 
 

 


회귀트리(Regression Trees)회귀트리는 계속 해서 2가지의 가지로 회귀적인 분할을 하는 과정의 방법이다. 이는 반복적으로 데이터를 2분류로 나누는 방법인데, 계속해서 2분류로 나누고 그 나눈 분류를 다시 2분류로 나누는 방법이다. 이런식으로 분할하여 분류모델을 만들어내서, 어떠한 변수들이 인스턴스를 설명할 때, 찾고자하는 종속변수를 예측할 수 있다. 즉, 선배들이 잘 만들어 놓은 길의 갈림길을 따라, 후배가 Root부터 leaves까지 쭉 따라가서 어느정도 종속변수를 예측하는 것이라고 생각하면 된다. 

분할을 하면 잔차의제곱합(RSS, 예측값과 관측값의 차이를 제곱하여 더한 값)이 개선된다. 트리의 마지막까지 계속 둘로 분할한다. 나무를 뒤집어 놓은 형식(식물의 뿌리같은 느낌)의 방향으로 분할하는 방식을 Top-down 분할이라고하고, 이런 과정을 Greedy라고도 한다. 또한 비선형 예측모델이다. 또한 DT 는 회귀문제에도 적용할 수 있고, 분류문제에도 적용할 수 있다.

참고로 

는 분류 결과의 왼쪽 branch를 의미하고, 

는 분류 결과의 오른쪽 branch을 의미한다. 

(외우기쉽게 이해하기엔, 등호 방향으로 만족한다라고 생각하면 된다.

 

 

Constructing the regions

이론상 region(예시에서의 반과 같은 구분할수 있는 공간)은 어떤모양이어도 되지만, 사람이 이해하기 쉬우러면 사각형이 편하다. 그렇기 때문에 2차원에서는 사각형, 고차원에서는 6각형이상의 고차원 박스가 나오는것이다. 이 모델의 목적은 그러면 어떻게 사격형(각 영역, 직사각형)을 구하냐는 것이다. 이는 아래의 식으로 구할 수 있다.아래의 식을 풀어해석하면은 각각의 yi에 대해서 j안에 있는 관측값들의 평균을 빼는 방식으로 모든 j개의 박스들을 다 계산을 하는 것이다. 그것의 값의 차이를 RSS라고 둔다. (회기식에서 RSS와 유사하다). 그러나 모든 J개의 분리가능한 파티션에 의해 계산하는 것은 거의 불가능하다. 처음부터 파티션을 어떻게 정하는지도 정해져있고, 생김도 모두 다르기 때문인 듯. 그러므로, 우리는 Top-down방식Greedy approach (=recursive binary splitting)의 방식을 이용하면. 가능하다. 처음 영역을 모두를 포함하는 영역이라고 하고, 변수에 따라 박스를 하나씩 그리면서(파티션을 두면서) 나눠가는 것이다. 파티션이 생기면 2개의 박스조각으로 나뉘는데 이게 tree의 branch가 된다. greedy라고 하는 이유는 각 스텝에서 최적의 파티션을 찾는 것은 특정 파티션을 찾을때까지 나누지 않기때문에 이렇게부른다)

 

 

 

1. 트리를 키우기 위해서, 계속 split을 하게되는데 recursive binary splitting을 한다. (즉 Numer of splitting이 큰게 large tree) 

 (관측수보다 트리의 말단노트가 적을 때까지 진행한다)

2. 그리고 너무 많은 subtree을 제거하기위해서 Cost complexity pruning을 진행한다. (= 최적의 subtree을 찾아서, 제거하기 위함이다)

3. K-fold cross-validation 을 진행한다.

 1) K번째 fold를 빼본다음에 오류값을 계산하고 , 오류가 최소가되는 subtree을 찾는다

4. 다시 2번을 진행한다.

 


Overfitting in Decision tree

의사결정나무 중, ID3을 이용하면, 말단 노드들은 퓨어한 상태까지 분류가 이루어지게 된다. 사용되는 피쳐들이 몇개 없다면 상관 없지만, 피쳐들이 많다면, 이러한 방법은 문제가된다. 데이터의 수가 많은경우, 아웃라이어처럼 예외적인 데이터들도 있을 텐데, 이 경우의 수에 대해서 다 퓨어하게 분류를 하게되기 때문이다. 즉, 노드의 개수가 많아지면서 오버피팅 문제가 발생할 수 있다. 즉, 예외일 수도 있는데, 굳이 분류를 하게되는 것이다. 오버피팅을 줄이기 위한 방법은 아래의 두가지로 요약할 수 있다.

 

1. Stop splitting

   A. Minimum n.이 방법은 쉽게말해서 마지막 노드들에 대해서 최소 이정도 갯수를 가지면 split을 멈추게 한다는 것이다. 

   B. Fraction of objects: 이 방법은 말단 노드들이 퓨어한 상태이거나 , 또는 본인이 지정한 수만큼, 노드안에 종류가 포함될 때 멈추는 것이다. 

 

2. Pruning

트리의 크기가 너무 커지면, 해석하기도 어렵고 오버피팅이 생기기 때문에, 적당한 크기의 트리를 만드는게 중요하다. Pruning(가지치기)라는 방법은 가장 큰 Tree(number of split이 최대인 tree)을 그린다음에 서브트리를 하나씩 빼보는 것이다. 그러면 어떤 서브트리를 뺴야 가장 좋은 선택인지를 정해야한다. 즉, 서브트리를 뺴도 설명력이 흔들리지 않아야한다. 유사하게말하면, 빼도 괜찮은 트리는 에러가 크게 나지 않을 것이다. 있으나 마나한 그저그런 파티션일거니깐. 예를 들어, 한 서브트리를 정한다음에, 이걸 뺄지 말지를 고민할때는 Cross-validation을 해서 에러를 평가한다. 그렇기 때문에, 적어도 트리를 만들 때, 3그룹 이상이 필요하다. 즉 train, validation, test로 나눌 때 가능하다(Validation set가 있을 때 가능하다. 왜냐하면, train set와 비교하면서 프루닝해야되기 때문이다). 또한, 트리가 너무 큰 경우에는, 모든 서브트리에 대해서 계산을 해야되기때문에 시간이 오래걸린다. 그러므로 이 방법은 트리가 작은 경우에 사용한다.

 


 

 

해석(Interpretation)

 

트리구조에서 가장 상단에 있는 factor는 회귀트리에서 가장 중요한 변수임을 나타난다.

그리고 그 아래있는 internal node에 해당하는 변수들은 상대적으로 덜 중요한 변수라고 여겨진다.

 

Terminology

Terminal nodes (leaves): 각 영역R1, R2 등... 즉, 트리모양에서 가장아래에 해당하는 부분이다.

Internal nodes: 중간에 나뉘는 갈림길 (분지점)을 Internal nodes라고 한다. 예를들어 수학점수<80 ? 이렇게 쓰여져있는 지점들이다.

Branches: 각 노드들에 연결되어있는 tree의 일부를 branch라고 한다.

 

 

Complexity parameter(CP): 복잡도인자

nsplt : number of split. 즉 트리를 분할한 횟수

rel error: 상대오차. 분할횟수에 따른 RSS값을 분할하지 않았을 때의 RSS로 나눈 값 

xerror: 10-fold cross validation을 토통해 나온 값으로 평균오차고

xstd: 교차검증과정의 표준편차

 

 

 






반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Pandas Dataframe Manipulation  (0) 2019.02.14
Category data handling  (0) 2019.02.14
kNN model (k-Nearest neighbor model)  (0) 2019.02.13


동나비엔 - 회사탐방 (2018.07) Kyung Dong Navien, Company explorative visit




IR

KOR: 동사는 보일러 전문 제조업으로, 국내 140 만대의 보일러시장에서 Market share 1위 (30%)을 차지하는 기업이다. 최근 국내의 평 이한 성장률에 따라, 국내보다는 해외사업에 초점을 두고 있다. 1993년도는 북경, 2006년도는 상해와 미 국, 2008년도는 미국과 러시아, 그리고2014년도는 유럽지역까지 해외진출 로를 확보해나고 있다. 2006년도 상해는 석탄으로만 발전하기 시 기인 당시 진출하였고, 미국 경우 보일러가 아닌 ‘온수기 시장’으로 진출하였다. 당시 미국은 저가형, 저탕식 온수기가 주 시장이었 기 때문에, 계속해서 가열해야하는 불필요함 이 있었다. 따라서 동사에서 순간식 온수기 를 통해 미국시장의 활로를 트였다. 미국의 MS에서는 콘덴싱에서는 1위(전체 마켓비율 에서는 10%)이다. 러시아의 경우 2012년 현 지법인을 설립하여 영업중이다. 2014년은 유럽지역을 개입하여 런던에 현지 법일을 설립 하여 운영하고 있다.

(The company is a specialized manufacturer of boilers. It is the largest market share (30%) as 1400K units per year in the domestic boiler market (in Korea). In recent years, they have focused on overseas business rather than domestic ones, which is based on the average domestic growth rate. They entered the following markets each year. (Beijing, Shanghai, the United States and Russia in 2008, and in the year 2014 and Europe). In 2006, they entered the Shanghai market at the time of their development with coal only. In the US,  entered the water heater market, not the gas boiler. At the time, there was need to continue heating water when American use the heater in the United States and the heater is low-cost, reservoir-water tank heaters in the U.S. As a result, the company turned to the US market with an impulsive water heater. In the United States, they are the No. 1 in condensing market share(10% in the overall market ratio). In the case of Russia, we have established a branch office in 2012 and are operating. In 2014, the local law was established and operated in London through the European region. )

산업분석 -중국: 메이가이치(煤改氣)와 PNG 라인 구축

한국정부만큼이나 중국정부 또한 미세먼지 에 대해 고심하고 있다. 특히 봄철에 발생하 는 미세먼지의 약 40%정도가 가정발전으로 인한 요인이라는 보고가 있을 정도로, 가정 발전으로 인한 미세먼지 감축에 초점을 두고 있다. 메이지가치(석탄개조사업)는 대기오염 이 심한 '2+26'개의 도시의 석탄발전을 가스 발전이나 전기발전으로 하여 대기오염을 줄 이려고 하는 사업이다. 이 사업에 따라, 중 환차익으로 인한 영업 이익율 증가 예상 중국 공장의 CAPA 증가로 수익발생 기대 2Q 계절적 비수기보단 3Q, 4Q에 기대. 중국적부는 일부 가스보일러에 설치에 대한 보조금을 지급하거나, 일부 도시에 새롭게 건 축되는 아파트에 한해 에너지 효율 2등급 이 하의 보일러는 설치가 금지되어있다. 한편 가스보일러발전에는 가스 파이프 인 프라가 필요한데, 중국이 이에 대해서도 호의적이다. PNG1) 라인을 구축하고 있고 AIIB 에서도 상당한 규모의 자금을 투자받아 사업 을 진행하고 있다.

(As much as the Korean government, the Chinese government is also struggling with fine dust. It is reported that about 40% of the fine dust generated in spring is the cause of home power generation, so the Chinese government is focusing on the fine dust reduction due to home power generation. Maigaichi (coal generation escape project) is a project to reduce air pollution by gas power generation and electric power generation in coal generation of 2 + 26 'cities with severe air pollution. According to this project, the operating profit margin of Kyung Dong Navien is expected to increase. I expected to increase in CAPA in China plant and expected high profits to be in 3Q and 4Q rather than seasonally low in 2Q. The national government of China will provide subsidies for installation in some gas boilers or, in some newly built apartments in cities, Boiler installation is prohibited. The Chinese government are subsidizing the installation of some gas boilers or, in some newly built apartments in some cities, they prohibited to install boilers below the energy efficiency level 2. On the other hand, gas boiler generation requires gas pipes, which is also favorable for China. AIIB has invested a considerable amount of money in the business.)



중국'2+26개 도시의 메이지가치사업(석탄개 조사업'은 2019년까지 지속된다. 석탄발전으 로부터 탈피하여 가스발전 등 고효율 에너지 발전으로 바뀌어간다는 것이다. 최근 이 사 업이 진행중이지만, 시진핑 정부의 정치적 이슈(2기 출범)으로 인사이동이 이루어졌고, 인프라구축에 대한 입찰공고가 지연되었기 때문에 1분기의 비수기영향과 더불어 매출이 둔화되었다. 2018년 7월 현재 입찰공고가 어려건 진행되고있고, 이에 따른 경동나비엔 의 매출이 증가될 예상이다. 그리고 중국 전 체적인 보일러 시장의 크기는 그대로지만, 동사가 차지할 MS비율면에서는 조금 이점이 있을 것이라고 관계자는 말하였다. 또한 최 근 시진핑주석이 이 사업에 대한 컨퍼런스에 참여하였는데, 메이지가치 사업에 대해 긍정 적으로 평가하였고, 계속 이어져야할 사업이 라고 코멘트 했다는 점에서도 주목할 만하 다. 중국정부는 ‘2+26개’의 도시에 5년내 가스 보일러 보급률을 50%로 목표로 하고 있다.

(China's Maigaichi Project in 2 + 26 Cities (Coal Replacement Project) will continue until 2019. It is going to change from coal power generation to high-efficiency energy generation such as gas power generation. Although this business is in progress, sales have slowed in 1Q due to weak seasonality due to the personnel shift to the political issues of the Si Jinping government (the launch of the second phase) and delayed bid announcement for infrastructure construction. As of July 2018, bidding announcements are being made on a small scale and sales of Kyungdong Navien will increase. And the size of the overall Chinese boiler market remains the same, but the company said it will have some advantages in terms of the percentage of MS that the company will occupy. It is also noteworthy that recently, the commenter of SijingPing participated in the conference on this project, positively evaluated the value of the Maigaichi , and commented that it is a project to be continued. The Chinese government has set a goal of 50% gas boiler penetration in '2 + 26' cities within five years.)




한국

미세먼지 수혜 정책.. 과연 수혜?

2016년 6월에 미세먼지 관리 특별대책이 발표되었다. 그 다음해 역시, 2017년 미세먼지종합대책이 발표되었는데, 전년도에 비해 대동소이하지만 골자는 아래와 같다. 두 정책 모두 미세먼지 감축을 목표로 하고있지만, 차이라면 새로이 발표된 대책에는 1) 민감층 보호, 2) 2020년까지의 기간을 2022년까지, 3)기존 예산을 약 5.5조원에서 7.2조원으로 확대, 4)전국단위 확대+취약계층이다. 그러나, ‘보일러와의 연계성’ 측면에서 확인 되지는 언급되지 않았고, 직접적인 수혜는 없어 보인다. 그럼에도 보일러 업계에서 참고할만한 정책은 ‘저녹스 (NOx)보일러 교체사업’이다. 저녹스(NOx)에서 NOx는 미세먼지의 2차 생성물질이고, 서울을 기준으로 가정발전할 때 많이 발생되는 것으로 보고되어지고 있다. 이에 지자체와 중앙정부가 1:1비율로 기존 보일러에서 ‘친환경 콘덴싱/저녹스보일러’로 교체시에 보조금을 지원하고 있다. 참고로 저녹스보일러는 일반 보일러에 비해 단가가 15~20만원정도 비싸지만, 이 갭을 보조금이 충당해주고 있다. 서울시의 기준으로 저녹스보일러 교체사업에 대한 목표 교체수를 2020년까지 증가시키고 있고, 2018년기준으로는 이미 교체 목표량을 충족했다.

안타깝게도, 서울시와 경기부의 수도권 지역에서 시행하는 보조금사업이며, 보조금 규모가 약 20억정도 추산이 되기에, 매출액에 큰
영향을 주지는 않지만, 전국단위로 활성화될 수 있다는 가능성을 열어두고, 주목해볼만 한 정책이다. 참고로 저녹스보일러/친환경보일러 기준에해당하는 동사의 모델은 ‘한국환경산업기술원’에서 확인 가능하다.2)
(Korea - Do fine dust measurment benefit Kyung Dong Navien?
In June 2016, special measures for fine dust management were announced. In the following year, too, the fine dust comprehensive measures were announced in 2017, and it is compared to the previous year, but the main points are as follows. Both policies aim to reduce micro dust (fine dust), but there are small difference between them, the newly announced measures will include 1) protection of sensitive floors, 2) the period until 2020 until 2022, 3) expansion of existing budget from about 5.5 trillion won to 7.2 trillion won, 4) expansion of the national unit + vulnerable class. It is reported that NOx is a second generation material of fine dust in the term of NOx, and it is reported that it is generated when home power generation is based on Seoul. Therefore, local governments and the central government are subsidizing the existing boilers at a ratio of 1: 1 when they are replaced with "environment-friendly condensing or low-NOx boilers".
For reference, the low price of the low-NOx boiler is about 15 ~ 200 thousand won higher than a general boiler, but the subsidy covers this gap. As of Seoul, the goal is to increase the number of replacement targets for the low-NOx boiler replacement business by 2
By 2018, the replacement target has already been met. Unfortunately, this is a subsidy project implemented in the Seoul metropolitan area and Kyonggi province, and the amount of subsidy is estimated at about 2 billion won. It does not affect actually, but it is a policy worthy of notice, opening the possibility that it can be activated nationwide. For reference, the company's model, which corresponds to the low-NOx boiler / eco-friendly boiler standard, can be confirmed at the Korea Environmental Industry & Technology Institute. (URL: http://www.keiti.re.kr/site/keiti/main.do))


회사 분석
-국내 시장 분석
국내의 경우 매출액은 신규아파트의 공급의 한계로 향후 성장 가능성은 보수적이다. 한국은 약 140만대의 보일러시장이 있는데, 이중의 80%는 교체로 인한, 20%는 신규 공급물량이다. 신규 공급물량에 대해서는 영업 마진이 좋지 않지만, 교체로 인한 영업마진은 기대가 되는 정도이다. 국내 보일러업계제품들의 보일러 평균수명은 약 8~10년정도이다. 1기 신도시계획으로 아파트 붐이있던 2000년 전후로 2번째 교체수요가 타나날 수 도있다. 동사는 신규 공급물량은 줄어들 것으로 예상하지만, 교체수요가 증가할 것으로 예상하여 영업마진에 수혜를 볼 것으로 예상했다.
(Company analysis
- Domestic market analysis
Domestic sales are conservative due to the limited supply of new apartments. There is about 1.4 million boiler market in Korea, 80% of which is replaced and 20% is it. Although the operating margin is not good for new supply volume, the replacement margin is slightly expected. The average life span of domestic boiler industry boilers is about 8 ~ 10 years. With the first new city plan in Korea, there may be a replacement demand around the 2000s when the apartment boom was in place. The company expects new supply volume to decline but expects replacement demand to increase, benefiting from the operating margin.)


-중국시장 분석
중국에서의 보일러 업계는 약 200업체가있다. 큰 파이를 다 같이 작게 나눠먹는 형태인데, 1~3위는 자국 브렌드이며 4위는 유럽브렌드, 5위는 린나이, 동사는 10위정도된다(MS 2%) . 2018년 1Q 중국 가스인프라지연과 관계없이 동사는 MS에 변화는 크게 없을 것이라 예상된다. 아주 소폭 상승하는 정도이겠지만, 향후 전체 보일러시장이 커짐에 따라 수혜가 예상된다. 관계자는 중국매출에 대해 작년 매출보다 자신있다고 하였고, 순차적으로 유의미한 매출이 나올 것이라고 예상하였다. 동사의 중국 관련 비즈니스 유통망은 2가지이다. 하나는 직접입찰 방식이고, 다른 하나는 다른 회사의 입찰해서 간접적으로 수주를 받는다. 2018년도도 2017년도와 마찬가지로 위와 같은 방법으로 입찰한다. 최근, 중국 지역 내 가스회사들이 가스보일러를 직접 설치하기도 하였는데, 이 부분에 대해서도 동사는 물량을 확보하려고 노력하고있다고 밝혔다. 예를들어 차이나 가스라는 가스회사가 있는데 이 회사의 지분을 SK가 가지고 있어 SK를 통하여 입찰을 노력하는 모습을 보인다. 2Q의 영업이익율은 1Q나 2Q나 별로 다를바가 없을 것이라는 것이 시사되었다. 하지만 환이익이 올라가면서 하반기 실적에 영업이익율이 증가할 것으로 예상한다.
- China Market Analysis
There are about 200 boiler companies in China. The big pie is divided into smaller portions. The first to third is the domestic brands, the fourth is the European brand, the fifth is the Rinnai, and the tenth is Kyung Dong Navien (MS 2%). Regardless of the delay in the Chinese gas infrastructure in 1Q 2018, the company is unlikely to change significantly. The boiler market is expected to increase slightly, but it is expected to benefit as the entire boiler market grows. The official of KDN said that China sales were more confident than last year's sales and that sales would come out sequentially. 
There are two types of business distribution networks in China. One is direct bidding and the other is indirectly bidded by another company. As in the case of 2017, we will bid in 2018 as above. In recent years, gas companies in China have installed gas boilers directly. And, the company official said it is trying to secure the volume through it.  For example, there is a gas company called China Gas, SK group owns a stake in the company.  The 2Q operating margin should not be much different from 1Q or 2Q. However, we expect the operating profit margin to rise in 3Q  /4Q 2018 as the profits increase.

-북미시장 분석: 이익율이 증가할 것으로 예상한다. 

북미는 온수기로 약 15%정도 매출을 성장시키고 있다. 2018년 1Q의 경우 14%정도 성장하였는데, 2Q의 경우 비수기이지만, 환이익(달러강세)로 5%정도 가산하여 20%의성장률을 보일 것이라 예상된다. 지역별 영업이익 따지면, (기준일을 못들었지만..) 국내 영업이익은 국내가 3040, 북미가 2400, 러시아 350, 중국 777, 기타 130억이었다. 북미에서도 2018년 2Q부터 나타났던 달러 강세로 동사의 영업이익율은 더좋을 것으로 예상된다.

-North American market Profitability is expected to increase.

North America is growing its sales by about 15% with a water heater. In 1Q 2018, the company's 1Q growth was about 14%. In 2Q 2018, it is in the offseason, but it is expected to grow 20% YoY by adding 5% to the won (strong dollar). Domestic operating profits were 3040 billion in Korea, 2400 billion in North America, 350 billion in Russia, 777 in China, and 13 billion in other operating profits. In North America, the operating profit margin is expected to be even better due to the strength of the dollar from 2Q08.


 -유럽의 경우

자국브렌드 선호, 진입이 어려움

- In Europe

European prefer a domestic brand. The company is difficult to enter the EU's market



투자판단의 도움을 주는 참고자료일 뿐, 매수/매도에 대한 의견은 없습니다. 작성자는 2018년 7월 8일 현재 경동나비엔 종목의 발행주식을 유통주기준 1% 이상 보유하고있지 않습니다.

This report has been prepared for informational purposes only and is not offered as advice on strategy. As of July 8, 2018, the author does not own more than 1% of the issued shares of Kyong-dong Navien as of the end of the reporting period.





반응형




파이썬에서 데이터프레임은 자체적으로 지원하지 않기 때문에, 데이터를 분석하는 분석가 입장에서는 판다스 객체를 따로 배워야한다. 판다스 객체를 핸들링하는 방법이 여러가지 있는데, 어떤 메소드들이 있고, R과 SQL에 익숙한 사용자들이 비교하기 쉽게 이해하는게 기억에 쉬울 것 같아 아래의 컨텐츠를 작성했다.



Pandas Series 객체

Pandas Series는 인덱싱된 1차원의 배열이다. 

리스트나 배열로 부터 만들 수 있다. 앞에 인덱싱이 있기 때문에, 데이터프레임처럼 생겼는데 사실은 1차원이다. 


1
2
3
4
5
6
7
8
9
10
import pandas as pd
data = pd.Series([1,5,4,3,2])
data

--출력결과--
0    1
1    5
2    4
3    3
4    2
dtype: int64
cs


pd.Series.values : 이 시리즈에서 인덱싱을 제외하고 value값만 찾고싶으면 pd.Series.values 함수를 사용한다.

pd.Series.index : 마찬가지로, 시리즈에서 인덱싱을 출력하고 싶으면 pd.Series.index을 이용한다.

Indexing and Slicing: NumPy 배열, 리스트처럼 인덱싱이 가능하다.




판다스 데이터프레임 조작을 위한 코드 정리 (SQL과 R과의 비교)


SELECT

Dataframe.column :시리즈로 출력

Dataframe['columns']

Dataframe[['columns']]: 출력하고자 하는 컬럼이 2개 이상일 때는, 2개 이상의 컬럼을 리스트로 묶어줘서 파라미터로 넣어주어야한다. 이는 데이터프레임 형식으로 출력된다.


select 문에서의 출력컬럼의 정의

예를 들어, SELECT Age, Multiple, Age * Multiple as Age_Multi FROM Demographic 이라는 SQL식이 있다고하자. 이런것과 마찬가지로 파이썬에서 바로 연산이 가능하다. 즉, 행별로 곱한 출력한 값이 나타난다

1
2
3
dataset['Age*Class'= dataset.Age * dataset.Pclass
 
 
cs




WHERE (equiv 조건)

df[df['찾는칼럼명']== 찾고자하는 변수]

2개 이상의 조건절

df[(df['찾는 칼럼명'] == 찾고자하는 변수) & or | (df['찾는 칼럼명'] == 찾고자하는 변수)) 


위의 조건절을 non-equivalent하게 찾고자한다면, ==대신에 ><등 의 부등식을 사용하면된다


pd.where(condition, other, inplace)

inplace: 매개변수를 True을 설정하면 호출된 데이터프레임 자체를 수정하고, 아무런 값도 반환하지 않는다.



loc을 이용한 데이터 조건활용

df.loc[데이터 조건절, '출력하고자하는 데이터 컬럼명']



GROUP BY

df.groupby('칼럼명', as_index=False)

as_index: 그룹으로 출력된 행들을 인덱스를 붙이고자할 때, as_index = False 인경우는, SQL style 처럼 그룹화된 결과를 출력하고자 할 때


GROUP BY value count

month_users.groupby(['serviceId']).size()


ORDER BY

df.sort_values(by='정렬할 칼럼명', ascending = True/False)



Pandas describe function


example

df.describe()

include = 'all' : 결과내 낼 수 있는 모든 변수들을 출력


Count(distinct): 

pd['column'].value_counts() : 카테고리 변수의 각 변수값이 몇 개가 있는지 확인할 수 있음


WHERE 

ex)

df[df.컬럼 == '벨류']


Delete

df.drop('삭제하고자하는 칼럼명, axis=1)

axis=0으로 지정하면 인덱스를 날리는거고, axis는 컬럼을 날리는 것






R과 비교

1. R: colnames(df)

Python: print(df.columns.values)


2. R: head(df)

Python: df.head(숫자)

숫자: head출력시, 앞에서부터 출력되는 행의 수


3. 데이터 구조 

데이터프레임의 구조, 데이터타입을 볼 때

R: str(df)

Python: df.info()


4. 데이터 요약 (통계량의 요약)

R: summary(df)

Python: df.describe(parameter)

1) include= All

2) include = ['O'] : 카테고리 변수에대한 빈도를 포함해서 보여줌


5. 히스토그램

R: hist(칼럼명, breaks=나눌 조각수)


Python


import seaborn as sns

graph = sns.FacetGrid(dataframe, col = '컬럼명') : 여러개의 플롯을 동시에 표현할 때 사용, col = 컬럼별 데이터를 서브셋하여 나눠서 플로팅할 경우

2) Map

graph.map(function, *'플롯할 데이터의 컬럼명', bins= '숫자)

3) add_legend()

graph.add_leggend(): 레전드 추가


참고로 '*' asterisk은 인자를 입력할 때, 임의의 숫자대로 입력이 가능한 상태이다. 예를 들어 def save_rank(*arg): print(args)에 인자를 save_rank('a','b','c')이렇게 넣으면 하나씩 맞춰서 출력한다. 이 기능을 unpacking이라고 한다. 리스트에 있는 값들을 하나씩, 두개씩, 또는 임의의 개수 대로 입력하고자할 때 사용한다.






Pandas 기타 함수

pd.cut() : 정렬된 데이터들을 X개의 구간으로 나누고자할 때 해당함수를 사용한다. 데이터가 연속형 데이터일 때, 사용하기 좋다. 순서일 때도 사용할수는 있기는 하다. 사용을 pd.cut(array-like data, bins=자르고자 하는 구간 수)


Pandas_series.mode(): 범주형 변수인 경우에 시리즈로 나타낸다음, '.mode()' 속성을 입력하면, 해당 리턴은 범주형 변수의 카테고리가 리턴이 된다.

반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Decision Tree (의사결정나무)  (2) 2019.02.15
Category data handling  (0) 2019.02.14
kNN model (k-Nearest neighbor model)  (0) 2019.02.13





대부분 우리가 알고있는 데이터의 형태는 Label encoding이다. 예를 들어서, 나라이름과 같이 나라이름이 명시적으로 기록되어있는 경우가 Label encoding이다. 그러나 이는 분석 단계에서는 Label encoding은 String dtype으로 분석 단계에서 계산하기에는 어렵다. 계산가능한 타입으로 만들어야 분석에서 사용할 수 있기 때문이다.


결과변수가 array 형태를 원한다면 sklearn.preprocessing 을 이용한다.


카테고리의 개수만큼 만들지말고 ,N-1개 만큼 만드는것을 추천한다. 추후에 선형회귀 등을 돌릴 때 변수를 N개로 만들면, 

n개에 대한 식이 생겨서 다중공선성이 생깄다. 예를 들어 3변수를 만들면,  x1+x2+x3 = 1이라는 식이 있기에 공선성이 생길수밖에 없다.



Mapping


이 방식의 문제는 각 카테고리변수를 서열척도로 변경하여 각각 1,2,3,4에 매핑한다는 것이다. 그렇기에 1에 매핑된 범주형변수는 2에 매핑한 변수보다 1/2이 크기가 작다고 머신러닝이 계산할 수 있다. 그렇기에 원 -핫인코딩을 하는 것이 권장된다.

1
2
3
4
housing_cat = housing["ocean_proximity"]
housing_cat_encode, housing_categories = housing_cat.factorize()
housing_cat_encode # array([0, 0, 1, ..., 2, 0, 3])
housing_categories  # Index(['<1H OCEAN', 'NEAR OCEAN', 'INLAND', 'NEAR BAY', 'ISLAND'], dtype='object')
cs






Pandas 내부의 함수를 이용한 변환



컬럼수준에서 One-hot encoding을 원한다면, Pandas의 get_dummies 을 이용한다.


get_dummies(data)

data는 array, series, dataframe모두 가능하다.

return 값도 데이터 프레임의 형식을 갖는다.



Example)

1
2
3
4
5
6
7
8
# 성별(SEX)컬럼을 one hot encoding한다
one_hot = pd.get_dummies(df['sex'])
 
# 원래 있던 칼럼을 삭제한다.
df = df.drop('sex',axis = 1)
 
# 원래 잇던 테이블에 새로만든 one_hot 데이터프레임을 조인한다. (SQL 조인과 관계없이 순차적으로 column bind)하는 것
df = df.join(one_hot)

cs


여러개 컬럼을 동시에 one-hot encoding

1
2
3
4
onehot_df = pd.get_dummies(df, columns=['nation''genre','limited_age'], drop_first=True)
len(onehot_df.columns) # 컬럼의 개수가 늘어난 것을 알 수 있다.
 
 
cs


반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Decision Tree (의사결정나무)  (2) 2019.02.15
Pandas Dataframe Manipulation  (0) 2019.02.14
kNN model (k-Nearest neighbor model)  (0) 2019.02.13

KNN

:비선형 기법. 지도학습기법. 

결정 분계선(Decision boundary)을 정의하기위해서, 이 결정분계선이 피쳐들의 선형결합이어야 한다는 가정을 필요로 하지 않는다.  또한, 인스턴스 기반 학습(instance-based learning, memory-based learning)이기 때문에, 모수가 없다(주석 참고). 그렇기 때문에, 이전에는 아무런 학습 작업이 없고, 모형에 대한 아무런 파라미터가 없어서 게으른 학습(Lazy learning)이라고도 불린다. 따로 모집단을 추론하지 않고, 필요도 없으니 비모수적(non-parameteric) 인 방법이며 분류와, 회귀(regression)을 위한 방법이다. 또한 레이블이 있는 상태에서 분류를 하기 때문에, 지도학습모델이다. 레이블이 있는 상태에서, 모델에대한 평가를 할 수 있다. 가령, 원래 클레스가 3개가 있다고 했을 때, 새로운 unseen data가 들어왔을 때, 이 새로운 데이터가 어느 그룹으로 결정될지 알 수 있기 때문에, 지도학습이다. 


어떤 도서에서는 기계학습의 정의는 '어떤 Task을 반복적으로 시행되었을 때, 퍼포먼스가 증가하는 학습 방식'이라고 정의해 놓는 책도있지만, KNN 은 이러한 점진적인 개선이 이루어지 않는 모델로 보인다. [알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문]



kNN은 새로운 데이터가 어느 그룹에 속하는지 분류하기 위해, 그 데이터에 가장 가까이에 있는 학습된 데이터가 속한 그룹을 알아보는 것이다. 즉, 거리계산을 통해서, 유사도를 평가해서 새로운 변수를 평가한다는 것이다. 즉, 변수가 유사한 것 끼리 묶는다는 것인데, 이 변수들을 Feature space라고 한다. K는  알고리즘이 얼마나 많은 이웃을 검사해야하는지를 정하는데, 만일 K가 7이었다면, 7개의 가까운 점을 검사하는 것이다. 또한 7개가 모두 똑같은 가중 값을 갖는다. 또한, k가 짝수이면 안된다. k가 짝수이면, 안되고 홀수여야한다. 짝수를 지양한다. 


Common Distance Metrics:



유클리드 거리(Euclidean distance): 연속형 분포일 때 사용. 



해밍 거리(Hamming distance): overlap metric. 겹치는 것들이 있는 변수들일 때 활용한다. 

e.g) SNS와 MMS는 거리가 2이며, Hole과 Hale은 거리가 1이다.


Discrete Metric (Boolean metric): X=Y이면, 거리가 0, 다르면 1 이런식이다.






 - kNN regression: 종속변수가 자료의 특성중에 하나 일 때, 종속변수는 k개의 근접한 이웃들의 값의 평균값

 - kNN classificaion: 종속변수(output)이 class일 경우에는 분류분석





(Source:http://2.bp.blogspot.com/-EK4tA2525EM/U-c6Q4jJuwI/AAAAAAAADjw/hdqRXuunpnQ/s1600/ knn.png)



kNN은 인스턴스 기반의 러닝 또는 메모리 기반 러닝이라고도 한다. 왜냐하면, 학습을 미리 하지 않고 미뤄두고 있다가 새로운 데이터의 테스크 요청이 오면 그때  분류를 시작하기 때문이다. 즉, 학습에 필요한 데이터를 메모리에 기억만 하고, 인스턴스가 발생할 때, 일반화하는 일을 시작한다. 이렇게 KNN 모델을 만드려면 3가지가 필요한데, 1) Feature space(training data), 2) Distance metrics, 3) Value of K이다. 이는 KNN모델을 만들 때, 파마리터가 되기도 할 것이다. Feature space는 변수들을 고정된 개수의 백더로 만드는 것이고, Distance metric은 거리를 측정하는 방식들을 의미하며, K는 몇개를 뽑을 것인지를 정해야한다는 것이다.


K에 따른 Bias, Variance

분류분석인 경우, K가 3이면 가장 가까운 3점을 한 원안에 담는다. 이 원안에 같은 클레스인것이 많은 클레스로 New instance(문제)를 분류한다. 그러므로, 모델에서 K를 어떤 수로 정하느냐가 모델의 퍼포먼스를 결정한다. K가 너무 작으면 bias가 작을 수 있지만, variance는 클 수 있다. 왜냐하면, k가 작다는 것은, 노이즈에 민감하단 얘기고, 그렇게되면 너무 민감하게 모델이 적용되서 오버피팅이 될 수 있다. 따라서, 모든 개별 개별 하나의 인스턴스를 고려하기떄문에 Bias는 작고 Variance는 크다. 반대로, K가 너무 크면, Bias는 클 수 있지만, Variance는 작을 수 있다. 인접주변의 인스턴스를 모두 포함하기 때문에, 다른 클레스도 다 같은 군으로 분류할 수 있다. 이는 Bias가 크고, Variancer가 작다.



Notes

정규화: 퓨쳐들의 사이에 계산을 해야할 떄, distance의 scale을 정규화하여 사용하여야 한다.(Normalization) 만약 키와 소득이 피쳐라면, 키는 빼봤자 숫자가 100이하로 차이나서 별로 차이가 안나겠지만, 소득은 100만 1000만단위이기 떄문에 차이가 많이난다. 


Charateristics

1. 비교적 적용이 간편한 편이지만, 모델을 계산하는게 리소스를 너무 많이 잡아 먹을 수 있다. 왜나하면, 군집할 떄 모든 거리를 측정해야하기 때문에 컴퓨팅 파워가 필요할 수 있다. 

2. 트레이닝을 포함하지 않아, 비교적 유연한 방식의 분류기법이다.

3. 노이즈에 의해서 정확도가 급격히 낮아질 수 있다.

4. 고차원의 데이터인 경우(=피쳐수가 많을 경우) 계산량이 많아지고, 거리를 측정하기가 어려워서 퍼포먼스가 점점 안좋아 질 수 있다.

5. 큰 데이터세트(인스턴스가 많은) 경우에 사용할 경우, 계산량 많이 발생할 수 있다. 많은 데이터포인트(인스턴스)와 계산해야되기 때문에... (1번이랑 유사)

6. 범주형 변수에서 잘 작동하지 않을 수 있다. 범주형 변수의 거리를 측정하는게 애매모호 하다


K-Means clustering vs K-NN 비교

K라는 값이 같이 들어가서, 머신러닝에서 주로 혼동되는 개념이다. 비교는 아래와 같다


K-means 

KNN 

비지도학습(Unsupervised learning) 

지도학습(Supervised learning) 

Clustering method

Classification, Regression 

K: 원하는 클러스터링의 집합(군집 집합의 갯수)

K: 새롭게 문제가 주어졌을 때, 근접한 인스턴스들의 갯수

(이를 이용해서 분류, 예측문제를 해결한다)



Model evaluation metric


분류문제의 평가는 보통 Confusion matrix을 통한 계산값들을 평가한다

 

True  positive

True Negative 

Predictive Positive

TP 

FP

Predictive Negative

FN

TN








*Instance based learning: 명시적으로 일반화 하는 알고리즘이 아니라, 새로운 문제(인스턴스)가 들어왔을 때까지 다른 인스턴스들을메모리에 저장해놓는다. 

** Bias: 머신러닝 모델이 모든정보를 고려하지 않아서, 잘못된 학습을 하는 것. Traing set을 맞추지 못하는 것을 바이어스라고 부른다. (High bias: 너무 모델이 심플 .underfitted to training set)
*** Variance: 머신러닝 모델이 Test set을 맞추지 못하는 것이 variance라고 부른다. (High variance: 너무 모델이 복잡. overfitted to training set )
Feature space: 실제 데이터를 vector형태로 같은 고정된 길이의 벡터로 변환하여 만든 데이터


반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Decision Tree (의사결정나무)  (2) 2019.02.15
Pandas Dataframe Manipulation  (0) 2019.02.14
Category data handling  (0) 2019.02.14

+ Recent posts