2014년 1월 28일 화요일

Python - A benefit of the module "Readability"

Main purpose : Comparison between two modules "Readability" and "BeautifulSoup"

Source = Chris Reeves'

I am going to introduce a new module "Readability" . Mainly, it is used to pull out the contents in HTML body. Some people may insist that users might be able to do with BeautifulSoup. So, let's compare those two.

import nltk
import urllib
import readability
from bs4 import BeautifulSoup
from readability.readability import Document
import mechanize

url = "http://www.nytimes.com/2014/01/27/us/politics/2014-elections-likely-to-keep-capitals-split.html?ref=us"

br = mechanize.Browser()
htmltext = br.open(url).read()

soup = BeautifulSoup(htmltext)
for tag in soup.find_all('p',attrs = {"itemprop":"articleBody"}):
        print tag.contents[0]

This is the code reading up HTML body contents using BeatifulSoup. You might also know, this code would bring only the half of (above the big pictures on articles) Body contents. When a bot met some Java Script, a bot commanded by BeautifulSoup might think the article is ended, so the program is terminated. It is why I recommend to use "readability" to pull out the HTML Body contents.


import urllib
import readability
from bs4 import BeautifulSoup
from readability.readability import Document
import mechanize

url = "http://www.nytimes.com/2014/01/27/us/politics/2014-elections-likely-to-keep-capitals-split.html?ref=us"

br = mechanize.Browser()
htmltext = br.open(url).read()

# The bestway to access HTML file is to use mechanize because it can avoid.
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent','Firefox')] # It says that I am not a robot, but a Firefox web browser

html = br.open(url).read()

readable_article = Document(html).summary()
readable_title = Document(html).short_title()
soup = BeautifulSoup(readable_article)

final_article = soup.text
print final_article
print readable_title

This is the code using readability, and there are a few things to remember.

br.set_handle_robots(False)
br.addheaders = [('User-agent','Firefox')] # It says that I am not a robot, but a Firefox web browser
# Avoid that you are not a robot 

Python Tutorial Part 3 - Keyword Extractor

Main Purpose : Build up own a keyword scrapper

Source : Chris Reeves' Python turorial

In this tutorial, we are going to learn how to build up keyword extractor.



Main,py

import gethtml
import articletext

url = "http://www.nytimes.com/2014/01/27/sports/committing-to-play-for-a-college-then-starting-9th-grade.html?hp"
# we will extract the keyword from this news article

article = gethtml.getHtmlText(url)
print articletext.getkeywords(article)                                         


gethtml.py

import mechanize

def getHtmlText(url):
        br = mechanize.Browser()
        htmltext = br.open(url).read()
        return htmltext

def getHtmlFile(url):
        br = mechanize.Browser()
        htmlfile = br.open(url)
        return htmlfile                                


articletext.py

from bs4 import BeautifulSoup
import gethtml

def getArticleText(webtext):
        articletext = ""
        soup = BeautifulSoup(webtext)
        for tag in soup.find_all('p',attrs = {"itemprop":"articleBody"}):
                articletext += tag.contents[0]
        return articletext

def getkeywords(articletext):
        common = open("common.txt").read().split("\n")
        word_dict = dict()
        word_list = articletext.lower().split()
        for word in word_list:
                if word not in common and word.isalnum():
                        if word not in word_dict:
                                word_dict[word] = 1
                        if word in word_dict:
                                word_dict[word] += 1
        top_words = sorted(word_dict.items(), key = lambda(k,v):(v,k),reverse = True)[0:25]
        top25 = []
        for w in top_words:
                top25.append(w[0])
        return top25

The most important key file is "articletext.py". The algorithm of this file group is followed as

  1. Call up "getHtmlText" in gethtml.py
  2. In gethtml.py, read up the HTML text in getHtmlText and return htmltext. So, the variable 'article' in Main.py now contains the HTML text.
  3. Call up "articlekeyword" function in articletext.py
  4. articlekeyword function in articletext.py takes a parameter as an "articletext". To separate the article into words list, the parameter "articletext" must be a list.
    1. So, we create a new function getArticleText taking a parameter as a HTML text, which we delievered in Main.py. The parameter was now moved to the new function getArticleText.
    2. for tag in soup.find_all('p',attrs = {"itemprops":"articleBody"} # You can check through Chrome
      
      Check only the body of text by words in such a method. Return such a word list
  5. We are going to find the words occurred in highest frequency. To avoid that words such as "the","a" are picked, we downloaded "the most used words top 500", and avoided words in this list.
  6. Construct the dictionary. Using dictionary, we can access the data not by its index, but by its "keywords". word_dict["keyword"] = "input-value" is the classical method to construct the dictionary. In this codes, "word_dict" is the dictionary contains the frequency of words in the article.
  7. Using lambda function, we sorted in order of high frequency.
    lambda "parameter" : "expressin"
    lambda x,y : x+y
    map(function, list)
    map(lambda x: x ** 2, range(5)) # [0, 1, 4, 9, 16]  
    
    "Sorted" is a function used for preserving the original target. Thus, you can sort any forms (dic, list, tuple) with sorted method.

Python Tutorial Part 2 - Page Scraper

Main Purpose : Build up own Web scraper

Source : Chris Reeves' Python turorial

From this post, we will use some useful modules specified to deal with HTML file, such as BeautifulSoup or Mechanize. This is also from Chris Reeves' Python turorial


Part 1. Page explorer - Beautiful Soup and Mechanize

import urllib
import urlparse
import mechanize
from bs4 import BeautifulSoup

url = raw_input("Input URL you want to scrape: ")
print urlparse.urlparse(url).hostname
1. br = mechanize.Browser()

2. urls = [url]
visited = [url]

2. while len(urls) > 0:
3.      try:
1.             br.open(urls[0])
2.             urls.pop(0)
4.             for link in br.links():
                        newurl = urlparse.urljoin(link.base_url,link.url)
                        b1 = urlparse.urlparse(newurl).hostname
                        b2 = urlparse.urlparse(newurl).path
                        newurl =  "http://"+b1+b2

5.                     if newurl not in visited and urlparse.urlparse(url).hostname in newurl:
                                visited.append(newurl)
                                urls.append(newurl)
                                print newurl
3.      except:
                urls.pop(0)

This is the classic page explorer program, and here the algorithm is.

  1. Open up one stack and one box containing historical records of spider's behavior
  2. Start the while roop with a condition of empty stack. (Starting with a base URL in the stack, we will find every sub-URL of base URL and put in what we found into the stack. Every time the spider visits a certain page, that page is removed in the stack. The workflow follows the ㄹ method, which works in horizontal first.
  3. Once the program read the HTML, then delete it by using urls.pop(0)
  4. It is also one of classical method to find all sub URL.
    "http://" + urlparse.urlparse(url).hostname + urlparse.urlpasre(url).path
    
  5. If such an URL is not in visited box and hostname is in our new subURL, keep working.

Here are some important codes that we have to remember.

1.

br = mechanize.Browser() ## br is commanded to work in similar way as a Web Browser. 
br.open(url) ## open an web site and bring HTML as a file 

2.

while len(urls) > 0: 
       urls = [url]
       # After read 
       urls.pop()

3. Try- Except. If some error occurs, then follow the command written after except. If the website we are crawling has some error-hyper link, we can deal with that as an error, and just keep going on to the next task.

4.

for link in br.links () ## br.links() examines every sub-link to find subURL. A 'link' is the key to move in br.links()
     link.base_url  ## link.base_url is the base URL. It stands for the horizontal position the robot is exploring now. 
     link.url ## link.url is to find every sub-URL. 
     newurl = urlparse.urljoin(link.base_url,link.url)
     b1 = urlparse.urlparse(newurl).hostname
     b2 = urlparse.urlparse(newurl).path ## it is more clever method to find subURL without JavaScript Trap. 
     newurl = "http://"+b1+b2

5.

if newurl not in visited and urlparse.urlparse(url).hostname in newurl: ## 1) Not in historical data, 2) same tree
     visited.append(newurl)
     urls.append(newurl)
     print newurl



Part 2. Use BeautifulSoup

# Another elements of url not with / this form 
import urllib
from bs4 import BeautifulSoup
import urlparse

url = "http://nytimes.com"
htmltext = urllib.urlopen(url)
soup = BeautifulSoup(htmltext)

1. for tag in soup.find_all('a',href = True):
        raw = tag['href']
2.        b1 = urlparse.urlparse(tag['href']).hostname
        b2 = urlparse.urlparse(tag['href']).path # * 
        print str(b1) + str(b2)

#* Spider trap:
        # We don't use the method used in last tutorial
        # because sometimes WEB gives certain ID to users and Spider web might be confused it as all different website
        # That is why it is good to use urlparse.path

1.

 
for tag in soup.find_all('a',href = True)

It finds every sources containing "a href".

2.

 
urlparse.urlparse(tag['href'])
The result of 1. is not a string. With this method, we can convert the result into the string.



Part 3. Find the smartest way to make sub-url

import urllib
from bs4 import BeautifulSoup
import urlparse
import mechanize
# Simulate the browser

url  = "http://sparkbrowser.com"
count = 0

# The smartest method ==> No hashtop such tha sparkbrowser.com#top 

br = mechanize.Browser()
#Just copy how the Browser acts 
br.open(url)
for link in br.links():
	newurl = urlparse.urljoin(link.base_url,link.url)
	b1 = urlparse.urlparse(newurl).path
	b2 = urlparse.urlparse(newurl).hostname
	print "http://"+b2+b1
	count += 1
print count
		# IN this way, we don't include Javascript such as #top 
		# Best way



# Method_3. NOT WORK Use urlparse.urlparse(tag['href']).path or hostname
'''
htmlfile = urllib.urlopen(url)
soup = BeautifulSoup(htmlfile)

for tag in soup.find_all('a',href=True):
	b1 = urlparse.urlparse(tag['href']).hostname
	b2 = urlparse.urlparse(tag['href']).path
	print "http://"+str(b1)+str(b2)
'''

# Method_1. Use BeautifulSoup 
'''
htmlfile = urllib.urlopen(url)
soup = BeautifulSoup(htmlfile)

for tag in soup.find_all('a',href=True):
	print tag['href']
'''


# Method_2. Use mechanize 
'''
br = mechanize.Browser()
br.open(url)

for link in br.links():
	newurl = urlparse.urljoin(link.base_url,link.url)
	print newurl
	count += 1
print count
'''

The best way is already introduced in Part 1. The second best way is to use a BeautifulSoup, but it cannot filter some Java script trap.

Python Tutorial Part 1 - Program scrapping Stock Price

Main Purpose : Build up own the stock price scraper

Source : Chris Reeves' Python turorial

Recently, I found a good tutorial to have interest in Python: Chris Reeves' Python turorial I want to abridge what I have learned from this tutorial. The main purpose of this tutorial is to build my own Web Spider
(Web bot, Web crawler, or whatever so called)

First 10 of tutorials deal with constructing up a program scrapping stock prices of companies registered in NASDAQ list. In this post (part 1), I am going to review the Python codes for study.

Part 1. Stock Price - A single company, say, Apple

This is the code for scrapping the last price of APPLE from Yahoo Finance - Apple
 
1. import urllib
    import re

htmlfile = urllib.urlopen("http://finance.yahoo.com/q?s=AAPL&ql=1")
2. htmltext = htmlfile.read()

regex = '(.+?)'
pattern = re.compile(regex)

3. price = re.findall(pattern,htmltext)

print price   

A main algorithm for this code is to read HTML file, and scrape the HTML source standing up the last price.

1. Import the module "urllib" and "re". A "urllib" is a module to read up HTML, and "re" module is a module to use Regular Expression, which is useful to deal with character strings.
2.

 
htmlfile = urllib.urlopen(url)
htmltext = urllib.urlopen(url).read()
 
is to read a HTML of the website. In this code, we read the HTML as a text, not a file, to use a certain keyword with 'Re' module (It is useful to read HTML as a file to use BeautifulSoup method, which we will deal with later)
3. This is the useful link for learning a Regular Expression (it is written in Korean, because I am a Korean. You can find some well written tutorials easily.)
 '(.+?)' 
'()', in ReGex, is to used in grouping ReGex. For example, Set (Value) is matched with "Set" and "Set Value". A dot (.) is matched with anything, and "+" means "more than one", equivalently 'not empty'. In totally, (.+?) will be matched any string up to .
pattern = re.compile(regex)
find = re.findall(target, htmltext)
A "re.compile(regex)" compiles and "re.findall(target,htmltext)" convert the regex language into the word we can understand.


Part 2. Stock Price - Multiple companies

This is the code for scrapping every code registered in NASDAQ. Preliminarily, we have to download the list of the code of companies listed in NASDAQ. You can easily download it by googling.

import urllib
import re

symbolfile = open("stocklist.txt")
1. symbolslist = symbolfile.read()
2. uppernewsymbolslist = symbolslist.split("\n")
3. newsymbolslist = [x.lower() for x in uppernewsymbolslist]
i = 0

while i (.+?)'
        pattern = re.compile(regex)
        price = re.findall(pattern,htmltext)
        print "the price of",uppernewsymbolslist[i],"is", price
        i += 1
1.
file = open("directory of file/filename")
file_read_text = file.read()
This is how we let Python to read the file.
2. A 'split()' let python to save the text into the list.
3.
 newsymbolslist = [x.lower() for x in uppernewsymbolslist]
It is pretty interesting that this command is actually working. It is why Python is such a strong language. It resembles how we talk. It does mean that "Lower x, which is an element of the list "uppernewsymbolist."



Part 3. Quicker Method to scrape the price of multiple companies

import urllib
import re
import json

NASfile = open("stocklist.txt")
NASread = NASfile.read()
NASlist = NASread.split("\n")

i = 0
while i < len(NASlist):
        url = "http://www.bloomberg.com/markets/watchlist/recent-ticker/"+NASlist[i]+":US"
        htmltext = urllib.urlopen(url)

1.         data = json.load(htmltext) #it takes only a file, it must occur an error!  
# It is file distinguished by a Hash Map, which will work as a key

        print data["disp_name"],":", data["last_price"] #works like an array, but it works with a key, not an index.
        i+= 1

You can find a Json file easily by separating any websites by "developer tool" in Chrome. In most cases, it is likely that a Json file include the data in the website. If you scrape more than 200 companies' stock price with a method in part 2, it might take more than 10 minutes to complete. If you would scrape it through "Bloomberg", which contains lots of heavy flash files, it might go worse. However,
if you could just scrape the price through Json files, just simple text files, it might take a few seconds to complete a task. This is the code how we do in such a way.

1. The biggest benefit that 'Json' module has is that it contains data in the form of list. The distinguished point from list is that you can call data not by an index, but by a keyword.
In this code, we defined a json file by the variable 'data'. You can call json file by calling its key in a form of 'data["key"]'.
It is important to keep in mind that the object of json function is a file, not a text.



Part 4. Printing out a result

import urllib
import json

#Open up the stocklist.txt
NASfile = open("stocklist.txt")
NASload = NASfile.read()
NASlist = NASload.split("\n")

for symbol in NASlist:
        1. myfile = open("/home/hansjung/Python/stockprogram/"+symbol+".txt","w+")
        myfile.close()

        htmltext = urllib.urlopen("http://www.bloomberg.com/markets/chart/data/1D/"+symbol+":US")
        data = json.load(htmltext) #When we use Json, we don't use .read()
        datapoints = data["data_values"]

        2. myfile = open("/home/hansjung/Python/stockprogram/"+symbol+".txt","a")

        for point in datapoints:
        3.        myfile.write(str(symbol+","+str(point[0])+","+str(point[1])))
        4.        myfile.close()

The basic algorithm for printing in a file (writing up in a file) is in following.

  1. (Open) Create a file printed your result (Close)
  2. (Open) Append your result into the file
  3. Write your result (Close)



Part 5. Quicker method - Using Multi-thread

1. from threading import Thread
import urllib
import re

2. def th(ur):
        base = "http://finance.yahoo.com/q?s="+ur
        regex = '(.+?)'
        pattern = re.compile(regex)
        htmltext = urllib.urlopen(base).read()
        results = re.findall(pattern,htmltext)
        print "the price of",str(ur),"is",str(results[0])

stocklist = open("stocklist.txt").read()
stocklist = stocklist.split("\n")
print stocklist

3. threadlist = []

4. for u in stocklist:
        t = Thread(target=th, args=(u,))
        t.start()
        threadlist.append(t)

5. for b in threadlist :
        b.join()

A multi-thread is able to your program to work in multi-tasking. Basically, computer programs are built up in following a certain sequence. In contrast, a computer program can work in multi-tasking by a multi-thread method. The basic algorithm for this computer program is following.

  1. Define the task to be processed in multi-tasking as a function
  2. Open the list 'threadlist' that stores up results
  3. Point your function in number 1 and setting up an parameter, and call up to start a task.
  4. Store up results into the list built in 2.

Actually, it is difficult to use this method, because almost all programmers are used to programming in sequence based. If we are able to use multi-thread properly, our work might be way more efficient.

1. Call the module. From A import B means that, from A folder, import B module file.
2. Define your task that you want to deal with in multi-thread.
3. Open up 'threadlist' (I don't know why we need this, but it is must be done)
4. Define a multi-thread and start it, then save up the result into the threadlist. 5. Prettify your result.

2014년 1월 23일 목요일

Current I am doing on Winter vacation

What I am currently doing
  • Taking a video lecture - Coursera
    1. Data Analysis
    2. Game Theory
    3. Social Network Analysis
  • Practicing programming - recently, I completed my own web crawler written through Python.
  • English Study
  • Exercise
  • Live as a Christian

Interesting tutorials about how to build the web crawler by Python

www.youtube.com/creeveshft
I found an impressive video list recently. It gives you lectures about how to build programs through Python. Unlike to other tutorials, this tutorials are really helpful because
  • It gives a lecture with an video
  • Short so to be able to keep concentration
  • Useful - Unlike other tutorials starting from "Hello, world", it gives you how to construct a "real" program applicable in real life.

Statistical Data Mining - FInd the Mr / Miss Right

Amy Webb, the speaker on that video, gave a speech about how she met her husband through online dating.

How she had done is similar to the way that a mathematician used. This is a link about how a mathematician found her girl friend. Link
The fabulous a data mining can give to the data miner is that once you have desire to know or find out something, you can gather, process and modify data to achieve your goal through data mining.

2014년 1월 21일 화요일

Why to pursue a Ph.D - Practical reasons

Why Pursue A Ph.D.? Three Practical Reasons (12-minute video) from Philip Guo on Vimeo.

A category of Ph.D in this video is called as a "STEM" field, which is an abbreviation of Science, Technology, Engineering, Mathematics. A topic for this video is practical reasons to pursue a Ph.D.

Overall, a Ph.D is a trade for your freedom. Instead of low salary and relatively a high burden of work, you will get as much as freedom on a course of getting a degree.
Practical reasons of pursuing a Ph.D
  1. Make a name for yourself
    • At age 22, you have to initiate, formulate, and execute a work, where you might not have such an opportunity in industry.
    • All works done by you will sorely belong to you constructing your portfolio. In contrast in firms, all your work will belong to the company.
  2. Fail in a safe environment - A Ph.D is the only job your failure can work as a seed for next success, not hurting your career path badly.
  3. More opportunities after getting the degree.

2014년 1월 20일 월요일

Curriculum in Statistics

2014년부터 통계학 연구실에 진학할 학생으로써, 통계학 커리큘럼을 확인하고자 한다. 현재 내가 수강한 과목들은 <확률 및 통계> <수리통계학> 뿐이다. 과목은 1학년부터 순서대로 적어본다. (서울대는 봄학기만 볼 수 있어서, 봄학기만 적어보았다.)

서울대

  1. 1학년
    • 통계학 - KAIST의 확률통계 과정. ANOVA 까지 다룬다. 교재는 일반통계학 - 김우철
    • 통계학실험
  2. 2학년
    • 통계학의 개념 및 실습 : 통계학과 비슷한 과목으로 보인다.
    • 확률의 개념 및 응용 : 기초확률론과 확률통계의 사이에 위치한 과목으로 보인다.
  3. 3학년
  4. - 계량경제학에서 반드시 커버할 것.
    • 수리통계
    • 회귀분석 및 실습 - 교재-Introduction to Linear Regression Analysis-Montgomery, Peck & Vining-Wiley-2012
    • 실험계획법
  5. 4학년
  6. - 계량경제학에서 반드시 커버할 것
    • 베이즈통계 및 실습
    • 비모수통계 및 실습
    • 시계열분석 및 실습

고려대 정경대학 통계학부

  1. 1학년
    • 통계적탐구
    • 기초통계 워크샵
  2. 2학년
    • 통계수학
    • 행렬이론 - 선형대수학
    • 통계프로그래밍 입문
    • 기초확률론
    • 회귀분석
    • 사회과학을 위한 통계적 방법
  3. 3학년
  4. - 계량경제학에서 반드시 커버할 것.
    • 수리통계
    • Nonparametric method
    • 실험계획법
  5. 4학년
  6. - 계량경제학에서 반드시 커버할 것
    • 다변량통계분석
    • 응용통계 - 금융통계, Biostatistics
    • Data mining 입문

다음은, 내가 수강하지 않은 과목 위주로, CMU Curriculum 을 적어본다.

CMU Department of Statistics

  • Prerequisite
    1. Statistical foundation - Regression
    2. Experiment design
  • Disciplinary Core
    1. 경제학 - 미시, 거시, 국제, 계량
    2. 기초확률론
    3. 회귀분석의 응용
    4. Data analysis

즉, 내가 수강하거나 공부해야 하는 과목들은, 다음과 같다.
  1. 경제학계열 : 계량경제학
  2. 통계학계열 : Regression analysis, Experiment Design, 고급통계학
  3. 확률론계열 : 확률론, 확률과정론

2014년 1월 18일 토요일

What is 'R'?

2014년 1월~2월, 학부 졸업과 석사 입학의 징검다리에 있는 입장이다. 이 시간동안 어차피 공부도 잘 되지 않고, 무엇을 배워두면 참 좋을까 고민하던 차에, 번뜩 생각난 아이디어. "R을 배워보자!"

2013년 방학 등 시간이 날때마다 틈틈히 C++, Python, MATLAB 및 프로그래밍 언어는 아니지만 HTML, LaTex를 익혀온 까닭에, 프로그래밍은 이제 자신이 있다. 이 새로운 언어가 나의 연구에 얼마만큼 편의를 제공해 줄 수 있을지 기대가 된다.

이 언어에 어떻게 접근해야 할까? 내가 구한 몇 가지 튜토리얼들의 목차를 정리하면 다음과 같다. (R 다운로드, 설치 등 당연한 정보들은 건너뛴다.)

R cookbook

  1. 변수 설정해보기
    • 변수설정하기 (vector 등)
    • 함수정의하기
  2. R에서 제공하는 기본기능들
    • Command history 보기
    • Script 돌려보기
  3. 입출력
    • 직접 데이터 입력하기
    • 입력된 데이터 반올림하기
    • 파일로 직접 출력해보기
    • CSV 파일 읽어오기
    • HTML 등 웹페이지에서 직접 데이터 긁어오기
  4. 데이터구조
    • 데이터를 벡터로 바꾸기
    • Matrix 다루기
    • String data 다루기
  5. 확률 & 통계
    • Combination, Permutation 계산
    • Random generating
    • Calc. Prob.
    • Quantile
    • Quantile
    • 회귀분석 및 ANOVA
    • 시계열분석


R을 이용한 통계프로그래밍

  1. 기본 입출력 명령어
  2. R object
    1. 데이터의 종류
    2. 벡터
    3. array & matrix
    4. list
    5. data frame - 우리가 생각하는 표
  3. 데이터 읽어오기
  4. R 프로그래밍
  5. R과 확률통계

2014년 1월 15일 수요일

Introduction of Statistical Data Mining

Statistical Data Mining
본문은 위의 글을 참조 / 번역하고, 필자가 주석을 단 글입니다.

Tutorial

Classification Algorithm, Regression Algorithm, Data Mining Operation 으로 나뉜다.
  • Decision Tree 가장 많이 쓰이는 Classification 기법. Information gain 이 추후에 들어오는 데이터를 어떻게 잘 모형화할 수 있는지 설명한다.
  • Information gain Entropy 이론을 다룬다. Entropy 는 Information gain의 가장 중요한 Measure 로 활용된다.
  • Probability 기본적인 확률지식을 다룬 이후에, Density estimation 등을 다룬다. 그 후에 Bayes 통계방법론으로 연결된다. 마지막으로, Multivariate density function 으로 연결되는 모형이다.
  • Gaussian 검색필요
  • MLE Parameter 를 찾는 Technique를 다룬다.
  • Cross Validation 기존의 Data를 바탕으로 Model 을 구축했을 때, future unseen data 를 얼마나 잘 설명할 지 말해주는 '설명력'에 관한 Topic 이다.
  • Neutral Networks 먼저 Linear Regression 부터 시작한다. 이를 통해 SSE 방법을 도출한다. 이 외에 Nonlinear Model 에 대해서도 다룬다.
  • Regression Algorithm Regression Trees, Cascade Correlation, Group Method Data Handling (GMDH), Multivariate Adaptive Regression Splines (MARS), Multilinear Interpolation, Radial Basis Functions, Robust Regression, Cascade Correlation + Projection Pursuit (뭐지 모르겠다.)
  • Bayesian Networks 확률모형을 다루고, Joint Distribution 을 다루며, 그것의 Drawback 을 다룬다. 그에 대한 대안으로 Bayesian Statistics 를 소개한다. 이를 이용한 Statistical inference 를 다루기도 한다. A typical use of inference is "I've got a temperature of 101, I'm a 37-year-old Male and my tongue feels kind of funny but I have no headache. What's the chance that I've got bubonic plague?".
  • Gaussian Mixture Model Density Estimation 을 비롯한, Clustering 에 가장 많이 쓰이는 분야이다. Clustering분야를 설명하고, Expectation Maximization 에 대해서 설명한다.
  • Markov Model DTMC, CTMC
  • VC dimension Machine learning 의 기초를 다룬다.
  • Game Theory Zero-sum Game Theory 를 다룬다. Non zero game theory 를 다룬다.


The elements of statistical learning - Data mining, Inference, and Prediction by Prof. Trevor Hastie, Robert Tibshirani, Jerome Friedman


Supervised learning

Supervised learning 에서는, Input information을 바탕으로 결과를 예측하는 방법을 학습한다.
  1. Overview of supervised learning
    • Two simple approaches to prediction : Least squares & nearest neighbors
    • Statistical decision theory
    • Statistical Model : Joint distributions & Function approximation
  2. Linear model for regression
    1. Linear regression and Least squares
    2. Shrinkage method
  3. Linear method for classification
  4. Basis Expansion and Regularization
  5. Kernel smoothing method
  6. Model Assessment and Selection
  7. Model inference and averaging
  8. Additive models, Tree, and related method
  9. Boosting and additive trees
  10. neural networks
  11. Prototype method and Nearest Neighbors

Unsupervised learning

Unsupervised learning 에서는, 결과를 예측하지 않는다. 대신, Input measure의 패턴과 관계를 파악하는 방법을 학습한다.
    • Association rules
    • Cluster analysis
    • Principal components, curves and surfaces
    • Matrix factorization
  1. Random forest
  2. Ensemble Learning
  3. Graphical method

Python 을 배우기 시작했습니다.

2014.01.15 일부로 Python 을 배우기 시작했다. 느낀 점을 정리해본다.

처음배우는 언어 및 학문에 진입하는 방법

역시 가장 좋은 법은 "Jumping into" 이다. 가장 쉬운 예로 영어를 배우는 과정을 생각해보면 된다. 수능을 보기까지 10년간 매일 꾸준히 문법, reading 공부하는 것보다 차라리 미국을 가는 등의 방식으로 그 언어에 뛰어드는 것이 가장 효과적으로 배우는 방식이다.

Python도 마찬가지였다. 어제 Tutorial을 다운받아서 이것만 읽어보려니까 재미가 없었다. 생각해보니 그랬다. C++을 처음 배울 때도, 프로그래밍은 하지도 않고 TCPL만 읽다가 때려친 적이 한 두번이 아니었다. 프로그래머 친구의 도움을 받아서, 매일 매일 알고리즘 문제를 풀자, C++에도 재미가 붙었고, 실력도 금방 늘었다.

Python을 배울 때도 그렇게 해 보았다. Tutorial 필요하다 싶은 부분까지 해보고, 내가 풀어왔던 수많은 알고리즘 문제를 Python 으로 Conversing 해보았더니, 정말 빠르게 언어에 친숙해지는 느낌이 들었다. Python 언어를 설치하고 딱 하루 지났을 뿐인데, 벌써 Try-cat.ch 문제 easy 부분은 거의 다 풀었다. 이렇게 언어에 익숙해지는거구나 싶다. 이제 자신감이 붙는다.

Python vs C++

솔직히 Python을 배워보니 '이 언어는 진리구나' 싶다. 배우기가 정말로 쉽다. 코드는 내가 C++ 로 짰던 코드의 1/4 분량밖에 나오지 않는다. 가독성도 훌륭하다.

단, 프로그래밍 공부를 C++로 먼저 시작한 것은 참 다행이구나 싶다. Python은 '학습용 C++' 처럼 느껴지기 때문에, 쉽게 배운 측면도 있을 것이다. 이 언어는 웹언어, Data analysis 까지 확장할 수 있단다. 더 배우고 싶어서 흥분된다.

2014년 1월 14일 화요일

[번역] SELF-STUDY PLAN FOR BECOMING A QUANTITATIVE ANALYST

출처 : Self Study Guide - How to become a quantitative trade
본 글은 위 링크를 번역 및 역자가 주석을 단 글입니다.

이 글은 quantitative analyst/financial engineer 가 되기 위한 Guide 이다. 이들의 주 목적은 Derivative products 의 Fair price 를 찾는 것이다. 이는 확률론, Measure theory, Stochastic Calculus 등에 대한 상당한 이해를 요구한다.

The Mathematical Fundamentals

  • Hull - Option, Futures, and other derivatives
  • Mark Joshi - The concepts and practice of mathematical finance
  • Martin Baxter and Andrew Rennie - Financial Calculus: An Introduction to Derivative Pricing,

Programming Skills

가장 Dominant 한 언어는 C++, Python

[번역] Self Study Guide - How to become a quantitative trader

출처 : Self Study Guide - How to become a quantitative trade
본 글은 위 링크를 번역 및 역자가 주석을 단 글입니다.

Quant Job 은 크게 Trader, Researcher, Developer 로 나뉜다. 본 글은 Trader 가 되는 가이던스이다. 우선, Quant Trader 가 되는 것은 아주 어렵다. 엄청난 돈을 받는만큼 경쟁률이 막대하기 때문이다. 이 글은 필요한 배경지식과 Career path 를 다룬다.

Setting Expectation

Quant trading researcher 는 무슨 일을 하는 사람들일까? 그들은 주로 금융이론과 관련된 논문을 읽거나, 쓰거나, 구현하는 일을 한다. 모든 과정은 자동화되어 있기 때문에, 실제로 투자를 하는 그런 고정관념과는 많이 떨어져 있다. (실제로, 퀀트는 월스트리트에 있는 연구실에 출근하는 대학원생 생활을 하게 된다고 한다.)

이들은 '장소만 월스트리트에 있는' 대학원생들이기 때문에, 실제로 학술적 연구를 하는 머리가 깨어있어야 한다. 그렇기 때문에 Doctoral research level 을 일반적으로 요구하게 된다. Background 에서는 대체적으로 다음과 같은 지식들을 요구하게 된다.

  • Mathematics : Probability, Statistics
  • Data handling : data cleansing, data backtesting, Machine learning


Necessary Background

공통적으로 요구되는 조건은 Numerate undergraduate degree Technical doctorate degree 이다. Numerate undergraduate degree 는 수학 / 자연과학 / 공학 등의 학부과목을 말한다. Technical doctorate degree 는 수학 / 자연과학 / 공학 등의 박사과정 자격을 말한다. 수학은 수학과 석사 수준의 지식이 필요하다. 수학 부문에서는 Bachelor degree 이상의 Official 학부 성적이 필수적이다. 그 외, Trader 들이 하는 대부분의 Job 은 Statistical Testing 과 Econometrics 와 관련된 일이기 때문에, 이 또한 아주 중요하다.

그 외에 Trader가 하는 Job의 대부분은 Model 구축이다. 따라서 R, Python, C++, Matlab 실력이 갖추어져야 한다.

마지막으로 요구되는 능력은, Journal of Portfolio Management 등의 논문에서 다루는 여러가지 금융 Technique 들을 빠르게 해석하고, 이를 재빠르게 적용할 수 있는 능력이다. 이 부분이 아주 중요하기 때문에, Top School 에서 Ph.D 를 하는 것이 중요해진다.

위에서 다룬것은 필수적인 능력들이다. 이 외에 부가적으로 요구되는 사항은 Advanced Regression Skill 과 Machine Learning 등 고급 데이터처리 지식이다.

2014년 1월 13일 월요일

금융공학 및 연구에 필요한 지식들

참조: 금융수학분야는 조금 다를 수 있습니다. 본 포스팅은 금융 및 금융공학을 중심으로 서술합니다.

경제학 (Including Finance)

세부분야
  • 기초 : 경제학개론, 미시경제학 : 경제학의 기본개념인 Optimal 및 개인의 선택 문제를 다룬다.
  • 거시경제학 : GDP를 중심으로 하여 다룬다.
  • 국제경제학 : 환율과 경상수지를 다룬다.
  • 금융경제학 : 아직 안 배움.
  • 금융이론 : 채권 + Portfolio optimization + Option

수학

세부분야
  • 기초 : 해석학, 선형대수학
  • 통계 : 확률통계, 수리통계
  • 확률 : 확률통계, 확률론, 확률미분방정식, 확률과정론
  • Optimization : Linear, Convex, OR

프로그래밍

세부분야
  • 기초 : C/C++ or Java or Python
  • 수치해석: MATLAB
  • 통계 : R
  • 그 외 리서치를 위한 웹프로그래밍 (크롤러 등) : Javascript

2014.01.13 뉴스리뷰

가계부채 1000조 돌파

구성
GDP 대비 75% 가량. 주택담보대출이 차지하는 비중은 약 450 ~ 500조로 거의 절반. 그리고 이 중의 90%가 변동금리이다. 즉, 금리, 집값 이 주요 관찰포인트
위험성 및 시나리오
미국의 서브프라임 모기지론 사태와 구조는 비슷하다. 집값을 담보로 잡은 무분별한 대출의 증가와 상환실패로 인한 MBS의 폭발이 그것이다. 하지만, 안정성 측면에서는 안심해도 좋다고 보인다. 왜냐하면, LTV 규제 등으로, 자산의 건전성에서 비교가 안 되기 때문. 다만, 집값이 떨어지고 있고 (올라갈 가능성은 없다고 본다) 금리가 올라간다면, 가계부채를 컨트롤하기가 상당히 힘들어질 것으로 보인다. 현재 한국이 낮은 2.5%의 금리를 유지하고 있는 이유.

중국, 그림자금융 손본다.

중국이 그림자 금융에 대한 개혁에 나섰다. 이는 지방정부 부채 개선과 연동되어 진행될 전망. 당분간 중국에서의 성장은 줄어들 수밖에 없다. 혹은, 그 성장은 IT, 내수 위주로 가지 자동차 등 인프라가 필요한 분야로 가지는 않을 전망.

중국은 직접 차관을 위해서 최대 규모의 딤섬본드를 발행했다. 지방정부의 채무능력이 흔들리는 상황에서의 결정이라고 보인다. 금리는 아주 낮게 조달되었는데, 이는 아직 위안화의 건재함을 나타낸다.

미, 옐런시대

옐런은 버냉키의 정책을 그대로 이어가서 완급을 조절하는 느린 속도의 Tapering 을 추구할 것으로 보인다. 옐런은 특히 고용에 치중하고 있으며, 6.5% 보다 낮은 실업률이어야만 Tapering을 가속화한다고도 밝힌 바 있다.

엇갈리는 글로벌 통화정책

미국
미국은 완만하게 Tapering을 실시하고 있다. 미국 국채금리는 꾸준히 오르고 있으며, 달러로의 회귀가 계속되고 있는 상황
Euro
유럽의 최대 위기는 디플레이션. 드라기는 이미 경기부양정책을 계속 지속하겠다고 천명한 상태이다. 이렇게 되면, 유로는 절하, 달러가 절상되는 효과가 발생하며, 유럽의 경기회복에 한결 기여한다.
일본
아베노믹스로 돈을 더 풀고 있다. 이렇게 되면, 우리나라는 수출에 크게 악영향을 받게 된다. 하지만, 대미수출에서는 상당한 이득이 발생할 것으로 보인다. 반면, 미국을 제외한 모든 국가가 경기부양기조를 아직 유지하고 있다. 저번의 경험으로 미루어볼 때, 2014년은 모든 나라가 Tapering 기조로 돌아서는 한 해가 될 것으로 전망한다. 달러가 오르다가 주춤할 전망.


신흥국가의 운명 - 케네스 로고프

최근 성장률 하락과 자산가치 급락으로 위기를 맞고 있는 신흥국들의 경제가 침몰할 것인가? 2008년 이후 급성장한 신흥국들의 경제가 최근 중국의 성장률 둔화와 미국의 양적완화(QE) 축소에 대한 우려감으로 어려움을 겪고 있다. 미국 연방준비제도(Fed)가 완만한 속도로 출구전략을 실시할 것이라는 발표가 신흥시장에 대한 불안감을 가중시켰다. 경상수지 적자가 심해 국제 자본조달을 통해 이를 메꿔야 하는 국가들, 예를 들면 브라질, 인도, 남아프리카공화국, 인도네시아 등이 더 큰 충격을 받았다. 이 국가들은 변동환율제도로 대외 충격을 흡수하고 축적된 외환보유액을 활용해 자국 시장을 어느 정도 보호할 수 있었다. 하지만 수년째 이어온 정치적 불안과 구조 개혁의 지연 등이 자본시장을 대내외 충격에 취약하게 만들었다. 또 신흥국들의 주식과 채권 시장은 유동성이 상대적으로 부족하다. 외국 투자자들의 이탈에 따른 충격이 더 큰 것도 이 같은 이유 때문이다.

최근까지 국제적인 투자자들이 이머징마켓에 대한 투자를 늘렸다. 금융위기 이후 개발도상국들의 성장세는 두드러진 반면 선진국들의 성장세는 둔화됐다. 신흥국의 중산층은 성장했고 이는 성장률을 높일 뿐만 아니라 정치적 안정까지도 가져올 것으로 예상됐다. 올해 들어 신흥국가들의 성장세가 둔화되면서 투자자들이 동요하고 자산 가격의 불안정성을 가중시켰다. 금융시장에서는 선진국과 개도국 간의 이자율 격차가 확대됐다. 이는 리스크 프리미엄을 반영한 채권가격이 정상화되는 과정으로 볼 수 있다. 하지만 국제금융시장은 과도하게 반응했다.

사실 성장률 둔화가 외환 주식 등 자산 가격의 불안정보다 더 심각한 문제다. 이 때문에 이머징 국가 위기가 심화될 가능성도 제기되고 있다. 외국 자본 이탈을 막을 수 있는 정책 수단이 마땅치 않은 것도 문제다. 선진국들이 2차 세계대전 후에 한 것처럼 신흥국가들도 자본 유출을 막기 위해 규제를 강화하고 자본 통제를 실시할 수도 있다. 하지만 현재 금융시장 규제는 자금의 효율적 배분을 가로막아 중장기 성장을 가로막을 수도 있다. 이런 문제에도 최근 신흥국 금융시장 불안이 과거 1980년대의 남미나 1990년대 아시아처럼 금융위기를 촉발하지는 않을 것으로 본다.

이머징마켓의 위기가 심화되면 세계 경제에 미치는 영향은 예상보다 클 수 있다. 국제은행시스템은 아직도 전반적으로 취약하다. 특히 유럽에서는 더 그렇다. 세계 경제 조절기능을 담당했던 국제통화기금(IMF)의 정책에 대한 회의가 일고 있는 점도 문제다. IMF는 유럽 위기 당시 금융 구조개혁을 유도하지 못했다. 이 때문에 IMF가 신흥국에서 효과적인 정책을 펴기 힘든 상황이다. 현실을 냉정하게 파악해볼 때 국제 투자자들이 신흥시장 투자를 포기하지는 않을 것이다. 여기에는 여러 가지 이유가 있다. 우선 유로존은 최악의 상황은 지났지만 여전히 문제가 남아 있다. 이탈리아와 프랑스는 거의 구조조정을 하지 않았고 강성노조가 개혁을 가로막고 있다. 스페인 같은 나라에서는 부채 문제가 여전히 남아 있다. 미국도 부채상한한도 조정을 둘러싼 정치적인 논란 때문에 어려움을 겪고 있다. 최근 위기에도 불구하고 신흥시장의 중장기 전망은 선진국들보다 좋다. 최근에는 선진국 시장으로 국제 투자자금이 유입되고 있지만 앞으로 신흥시장 정상화에 대한 기대감이 확산되면 선진국으로부터 빠른 속도로 자금이 이탈할 수도 있다. 최근 신흥시장의 성장 둔화는 향후 더 심각한 문제가 발생할 수 있다는 것을 미리 알려주는 경고에 그치길 바란다. 세계 경제는 아직 더 큰 재앙에 대비할 준비가 부족하다. <프로젝트 신디케이트>

요약하자면 다음과 같다. 신흥국들은 대부분 경상수지 적자국가들이다. 경상수지는 외국과의 거래를 통한 수지이며 외화로 Measuring 된다. 경상수지 적자는 곧 수입의 증가를 의미한다. 즉, 국내상품의 매출이 줄었다는 것을 의미하고, 이는 고용감소 등 실물경제의 위축으로 이어지게 된다. 경상수지가 적자를 보이게 되면, 이는 외화유출을 말하기 때문에 차관을 통해 그 정도를 빌려오던지, 국가가 가진 외환을 풀어야 한다. 이는 원화가치의 하락으로 연결되어 환율상승을 유발한다.

최대 소비국인 미국이 아직 살아나지 못하고 있고, 최대 생산국인 중국이 위축하는 상황에서 전 세계 신흥성장국의 성장률은 줄어든다. 그리고 이는 외국 투자자들의 탈출을 낳고, 경상수지 적자 및 외화의 유출로 이어질 수 있다.

2014년 1월 12일 일요일

김현우 선수 인터뷰 - 노력과 슬럼프극복

출처 : 김현우선수 인터뷰 링크 (퍼온 글)

Summary

  • 하늘을 감동시켜야 금메달을 준다. 항상 하늘이 보고 있는 것처럼 훈련하면 하늘이 금메달을 준다.
  • 승려같이 사는 것만이 유일한 성공의 지름길이다. 아침일찍 일어나서 반성하고, 수련하고, 일찍 잠이 들고....의 반복.
  • 목표를 달성한 이후의 무기력함을 극복하기 위해서는, 새로운 목표를 가지면 된다. 사람은 목표가 있을 떄 가장 활기차다. 항상 간절하게 목표를 그리자.
  • 슬럼프를 극복하기 위해서는 그저 노력밖에 없다. 노력에 노력을 거듭하면 시간이 슬럼프를 앗아가준다.
  • 시합이고 대회고 뭐고, 그저 훈련에만 집중하자. 훈련만 열심히 하고, 시합 때 훈련처럼만 하면 된다. 훈련만 열심히 해서 실력만 갖추면 금메달은 자동으로 들어온다.



| 스페셜 인터뷰 |
레슬링 김현우 선수


“나보다 더 땀 흘린 선수가 있다면 금메달을 가져가도 좋다.”
2012 런던올림픽, 한쪽 눈이 잘 안 보일 정도의 부상, 퍼렇게 멍든 눈으로 금메달을 따내며 많은 이들을 뭉클하게 했던 김현우(26) 선수. 그의 승리는 스스로도 인정할 만큼 그 누구보다 많은 땀을 흘리며 해낸 혹독한 훈련을 통한 것이었다. 그 후 1년, 66kg급에서 74kg급으로 한 체급을 올려 2013세계선수권대회에 도전한 김현우 선수는 다시 한 번 승리를 거두며, 한국 레슬링에 14년 만의 세계선수권 금메달을 안겼다. 땀은 거짓말을 하지 않는다는 것을 잘 알고 있는 스물여섯 청년, 그에게선 밝고 긍정적인 에너지가 넘쳐흐른다.
글 최창원 & 사진 김혜진
 

“나보다 땀을 많이 흘린 선수가 있다면 금메달을 가져가도 좋다” 메달을 따기도 전에 했던 그 말이 너무나 인상적이고 감동적이었습니다.
감독님이 늘 “하늘을 감동시켜라. 그래야 금메달을 준다” “니가 그만큼 하면 금메달 딴다. 다른 선수가 더 많이 땀을 흘리면 그 선수가 딴다” 그러셨어요. 처음에는 무슨 이야기지? 어떻게 하늘을 감동시키지? 했는데, 어느 날부터인가 하늘이 보고 있는 거 같은 겁니다. 전에는 코치님 눈치도 보고 그랬는데, 그 이후로는 누가 있으나 없으나 열심히 하게 되더라고요. 다른 사람은 몰라도 하늘은 알고 있잖아요. 그렇게 훈련을 하다 보니까 몸이 안 아픈 날이 없었어요. 안 아프면 ‘내가 열심히 안 했나?’ 반성하게 되고…. 그래서 오히려 몸이 아파야 좋았어요. 뭔가를 열심히 하고 있다는 증거니까. 그만큼 제가 훈련을 했고 자신이 있으니까 그런 말도 나오더라고요. 정말 저보다 땀을 더 많이 흘린 선수가 있다면 그 선수가 가져가도 되겠다 싶을 정도로요.

레슬링 선수들의 훈련은 특히 힘들다는 이야기를 많이 들었습니다.
정말 매번 겁날 정도예요.(웃음) 하루 4번을 운동을 해요. 새벽 운동, 오전 운동, 오후 운동, 야간 운동. 운동하고 밥 먹고 쉬고 운동하고 밥 먹고 쉬고. 기계처럼 똑같은 날들을 보냈어요. 올림픽 때는 그렇게 4년을 준비하는 거예요. 한 번 운동할 때마다 하늘이 노래지고 근육이 터질 거 같을 때까지 해요. 힘들어도 참으면서 하다 보면 그 과정에서 몸의 한계도 넘지만 정신적으로도 ‘나는 할 수 없다’ ‘안 된다’의 한계들을 계속 뛰어넘게 되더라고요.

그렇게 간절하게 원했던 금메달, 막상 딴 후에는 마음이 어땠나요?
너무너무 좋았죠. 아팠던 데도 하나도 아프지도 않고. 근데 시간이 조금씩 지나면서 뭔가 허무한 마음도 올라오더라고요. 삶의 목표가 금메달이었고, 특히 올림픽은 최고의 목표였는데, 더 이상 올라설 데가 없고 ‘이제는 뭘 해야 하지?’ 이런 생각도 들고요. 올림픽 후에 손가락 부상 때문에 재활 훈련을 받느라고 4개월 가까이 쉬었다가 훈련에 들어가면서 다시 열심히 할 수 있을까?라는 걱정도 들었습니다. 근데 올림픽 때 훈련했던 게 몸에 배어 있었는지 하면 또 열심히 하게 되더라고요. 몸이 자동적으로 뭘 시키면 열심히 하게끔 만들어져 버린 겁니다. 예전 같았으면 운동하면서 다른 생각을 막 하기도 했을 텐데, 다른 생각도 안 나고요. 올림픽을 준비하는 순간부터 그 이후로는 운동할 때는 운동 생각만 나더라고요. 프로의식 같은 게 진짜 생긴 거 같아요. 올림픽 이후에는 다시 새롭게 마음을 다지고 싶어서, 체급을 올려서 도전을 했어요. 다행히 좋은 성적을 거두어서 자신감은 생겼지만 아직 부족한 점이 많아서 더 열심히 저를 만들어가려고 하고 있습니다.

2012 런던올림픽. 그레코로만형 66kg급에서 금메달이 확정되자 감독과 코치를 향해 큰절을 올린 김현우 선수는 곧이어 건네받은 태극기를 앞에 두고 다시 한 번 큰절을 했다. 사진_연합뉴스



“올림픽은 나의 희망이다. 전 우주가 내 품에 들어오는 그런 기분….”
- 양정모(1976년 몬트리올올림픽 금메달리스트)
“사람의 적응력이란 게 무서웠다. 죽어도 안 될 거라고 생각했는데 진짜 죽기 살기로 독하게 하니까 되었다.” - 심권호(1996년 애틀랜타, 2000년 시드니올림픽 금메달리스트)
“심장을 토해낼 정도로 훈련했다.” - 김현우(2012년 런던올림픽 금메달리스트)

한국 레슬링계의 영광을 넘어, 평범한 개인이 노력을 통해 얼마나 큰 성취를 할 수 있는지를 보여주며 희망의 상징으로 자리 잡은 자랑스러운 얼굴들.

그런데 지난 2013년 2월 충격적인 소식이 전해졌다. 국제올림픽위원회(IOC) 집행위원회가 레슬링을 2020년에 개최될 올림픽 ‘핵심 종목’ 25개에서 제외하기로 했다는 것.

모두가 침통한 분위기, 하지만 김현우 선수와 동료들은 그 순간에도 얼마 후 있을 아시아선수권대회와 세계선수권대회를 묵묵히 준비했고, 그것은 금메달이라는 결과로 이어졌다. 그리고 다행히 지난 9월, 아르헨티나에서 열린 총회에서 가까스로 기사회생하였다는 소식이 다시 전해졌다.

레슬링이 올림픽 종목에서 제외되느냐 마느냐의 당시 마음잡기가 쉽지 않았겠습니다.
처음엔 너무 당황스럽더라고요. 하지만 절대 빠지지 않을 거라고 생각했어요. 레슬링이라는 종목이 고대 올림픽부터 이어져온 상징적인 종목인데 어떻게 빠질 수가 있나, 그런 생각을 했죠. 분위기에 다운되지 말고 평소대로 운동만 열심히 하자고 생각했습니다. 다행히 이걸 계기로 오히려 전화위복이 된 것 같아요. 퇴출 위기를 겪으면서 국제레슬링연맹에서도 룰을 공격적으로 많이 바꾸었어요. 좀 더 재밌게 관중들이 볼 수 있도록 만들려고요. 2분 3회전 세트제에서 3분 2회전 총점제로 바꾸었는데 그런 룰이 우리한테도 더 유리할 것 같습니다.

3분 2회전 총점제가 어떤 면에서 우리 선수들한테 유리하다는 거죠?
사실 레슬링은 유럽 선수들한테 유리한 종목입니다. 워낙 체격 조건이 좋으니까요. 한국 선수들은 그 부족함을 채우려고 체력 지구력 그런 쪽으로 훈련을 엄청 해요. 그래서 후반으로 갈수록 우리는 안 지치는데 상대 선수는 지치는 게 보이지요. 그러니까 한 회전의 시간이 길수록 우리한테 유리한 거예요. 하지만 솔직히 우리는 룰이 어떻든 거기에 맞춰서 하기 때문에 어떤 룰이든 다 오케이예요.(웃음) 훈련을 그만큼 하니까요. 체력적인 열세를 극복하고 우리나라가 레슬링 강국이 될 수 있었던 것도 강도 높은 훈련 덕분입니다. 우리나라 선수들이 정말 대단한 건 아무리 혹독한 훈련일지라도 다 따라갈 수 있는 정신 상태가 되어 있다는 점이에요. 깡다구 악바리 정신으로 해내는 거죠.


김현우 선수는 속칭 ‘만두귀’라 불리는 귀를 가지고 있다. 훈련을 하며 몸과 몸이 자주 부딪치고 바닥에 쓸리는 일이 많다 보니 핏줄이 터지고 연골이 망가지면서 찌그러져버린 귀, 그런 귀는 고된 훈련과 강한 의지를 말해주는 레슬링 선수들의 훈장이기도 하다.

중학교 때부터 레슬링을 시작한 김현우 선수는, ‘레슬링 신동’이라는 소리를 들을 정도로 어릴 적부터 두각을 나타냈다. 주니어 국가대표로 2006년 아시아주니어레슬링선수권 금메달, 세계주니어레슬링선수권 은메달을 따는 등 승승장구하지만, 20살 허리 부상으로 2008년 베이징올림픽 대표 선발전에서 탈락하게 된다. 그 후 2010년 광저우아시안게임에 대표 선수로 참가하지만 2회전 탈락의 고배를 마시게 되고, 김현우 선수는 그 시기를 자신의 인생에서 가장 힘든 때였다고 말한다.

2013년 9월, 헝가리에서 열린 2013세계레슬링선수권대회 그레코로만형 74kg급 결승전에서 로만 블라소프(러시아)를 2-0으로 누르고 우승을 차지했다. 블라소프는 3년간 세계 최강을 지켰던 선수. 김현우 선수로서는 66kg급에서 74kg급으로 체급을 올린 직후라 적응하기도 어려운 상태에서 우승을 했다는 점에서 더 화제가 되었다.

그 힘든 시기를 어떻게 극복했는지 궁금합니다.
2010년에는 진짜 준비를 많이 해서 나갔는데, 딱 지고 나니까 요즘 말로 완전 멘붕인 겁니다. 시합 끝나고 나와서 몇 시간을 밖에 앉아 있었어요. 눈물이 나면서 ‘열심히 해도 나는 안 되나?’ ‘레슬링 그만둘까?’ 그런 생각까지 하고 있는데 그때 김인섭 코치님이 오시더니 그런 말씀을 하시더라고요. “니가 여기서 밑바닥 쳤으니까 이제 올라가는 일만 남았다. 더 내려갈 곳이 없으니 열심히만 하면 돼. 나만 믿고 따라와. 2년 뒤에 꼭 금메달 따게 해줄게.” 듣는 순간 딱 안심이 되더라고요. 코치님에 대한 믿음이 있으니까. 그때부터 런던올림픽만 바라보면서, 운동할 때도 레슬링, 잘 때도 레슬링만 생각하면서 레슬링에 미쳐서 살았어요. 가장 큰 슬럼프를 코치님 덕분에 제일 빨리 나오게 된 거죠. 지금도 코치님한테 너무 감사해요. 지금 생각해보면 2008년에는 올림픽 나갔다고 해도 메달을 못 땄을 거 같아요. 그때는 그만한 간절함이 없었거든요.

여러 실패들을 통해 얻은 교훈이 있다면요?
광저우아시안게임을 준비하면서는 너무 긴장돼서 몇 달 전부터 불면증도 오고 그랬어요. 큰 시합은 처음이다 보니까 너무 떨리고. 그 마음을 컨트롤하지 못해서 충분히 이길 수 있는 상대에게도 진 겁니다. 다시 그런 실수 하지 말아야지 했지만 마음을 컨트롤하기란 쉽지 않잖아요. 그게 또 결과에 너무 욕심을 부리니까 불안하고 정작 중요한 순간에 집중을 못 했던 것 같아요. 그래서 어느 순간부터 그런 생각을 했어요. 시합이고 뭐고 생각하지 말고 훈련에만 집중하자. 그러면 당연히 실력도 좋아질 거고, 대회 때는 그대로만 하면 된다. 그리고 늘 긍정적으로 난 금메달 딸 수 있어, 그 정도 실력 있어, 그렇게 생각했더니 불안하지가 않은 거예요, 잠도 잘 오고요. 땀은 정말 거짓말을 하지 않는다는 것, 자기가 노력한 만큼 결과는 나온다는 걸, 그런 과정을 통해 알게 된 거 같아요.

 
레슬링을 하게 된 걸 후회한 적은 없었나요?
없었어요. 제 운명이었다고 생각하고. 솔직히 처음에 중학교 들어와서는 쫄쫄이 입고 운동하는 게 창피하고, 맨날 귀 찌그러져 있는 것도 힘들었거든요. 그런데 점점 커가면서는 없어지더라고요. 우리 중학교 은사님이 그 당시 우리들한테 정말 태릉선수촌에서 훈련하는 것만큼 빡세게 시키셨어요. 그때는 엄청 힘들었는데 지나고 보니까 그때 코치님이 계셨기 때문에 지금까지 레슬링을 할 수 있는 것 같습니다. 사실 레슬링이라는 게 재밌는 운동은 아니에요, 너무 힘드니까. 하지만 자유로운 기술이 구사된다는 굉장한 매력도 있습니다. 제 경기는 그레코로만형이어서 잘 모르시는 분들은 따분할 수 있는데, 자유형 경기는 기술이 화려하고 역동적이어서 딱 봐도 멋있거든요. 앞으로 좀 더 많은 사람들이 레슬링의 매력을 알 수 있게끔 묵묵히 역할을 하고 싶어요.

1935년 전후 일본에 가 있던 유학생들에 의해서 소개된 레슬링. 한국에 레슬링 경기가 본격화된 것은 해방 이후의 일이다. 1960년대에 접어들면서 레슬링 붐이 일기 시작했고 레슬링 인구도 서서히 증가했다. 레슬링에는 자유형과 그레코로만형 두 종류가 있는데, 자유형은 온몸을 이용하여 경기를 펼치는 데 반해 그레코로만형은 공격 때 발을 사용할 수 없고 또한 허리 이하를 공격할 수 없다. 이 방식은 19세기 초 프랑스에서 고대 그리스와 로마의 전통적인 레슬링 경기를 모방한 데서 유래했으며, 김현우 선수도 그레코로만형 선수이다.

열심히 운동하는 후배들에게 해주고 싶은 말이 있다면요.
레슬링 하면서 정말 많이 갖게 된 게 인내심이에요. 정말 간절하게 금메달을 갖고 싶으니까 뭐든지 참게 되더라고요. 놀고 싶은 거, 먹고 싶은 거, 훈련 힘든 거. 힘들었지만 목표가 확실하고 간절히 원한다면 다 견딜 수 있는 거 같아요. 그러니까 자기가 하는 것, 레슬링 선수면 레슬링, 유도 선수면 유도만 생각하면 좋겠어요. 그러다 보면 즐기게 되고, 즐기면서 하다 보면 금메달도 따게 됩니다.

2014년 9월에 있을 인천아시안게임을 준비 중이라고 들었습니다. 그 외에 계획이 있다면요?
아직 무슨 계획을 말하는 건 시기상조 같습니다. 지금은 인천아시안게임만, 또 거기 나가려면 국가대표가 돼야 하니까, 대표 선발전만 보고 있어요. 올림픽, 아시아선수권, 세계선수권에 이어 이번 아시안게임에서도 금메달을 따면 그랜드슬램을 달성하게 되니까 열심히 해야죠. 다음 올림픽 금메달에 대한 계획을 묻는 분도 있지만, 먼 미래보다는 지금 바로 앞에 있는 것들에 집중할까 합니다.

심권호, 정지현…. 올림픽 금메달리스트들을 보며 그들처럼 되고 싶다는 꿈을 꿨던 소년 김현우. 이제 아이들은 김현우 선수처럼 되기를 소망하며 레슬링을 선택한다.

“진인사 대천명. 사람으로서 할 일을 다하고 하늘의 뜻을 기다린다.”

레슬링을 해오면서 이런 좌우명이 저절로 생기게 되었다는 김현우 선수. 그에게 참 잘 어울리는 좌우명이라는 생각이 들었다. 열심히 땀 흘린 자만이 하늘의 뜻도 기다릴 자격이 있지 않겠는가. 그의 성취가 더욱 값진 이유는, 그 과정이 그만큼 진실했고 간절했기 때문이다. 순간의 성취를 이룬 자는 많다. 하지만 그 성취가 오래도록 빛나게 하기 위해서는 하늘을 감동시켜야 한다. 어떻게 감동시키냐고? 레슬링 김현우 선수처럼 하면 된다.

How to overcome a study slump

After the end of the Fall semester, I lost every passion I had had during the semester. It has been a week I've been in the school library for study, but I have done nothing due to loss of concentration. so, how do I get over a slump from a study? Here are some tips.

Remind yourself you are important in somewhere

Once starting slump, you might feel you don't keep up with your competitors, and you might be frustrated. Such frustration only causes a vicious cycle so that every situation around you would get worse and worse. Not to fall such a cycle, you have to remind yourself there is always a job you can do well In the case of a baseball player "Park-Chan Ho", when he fell slump in deep, it helped him to get over it to think he can teach the young students even if he would have been fired out of the team.
Chan Ho Park

Goal Oriented

In business, there is a concept 'MBO (Management by Objectives)'. MBO techniques requires us to specify the goal as narrow as possible. MBO works better if specified goals are visible, and easy to follow the track. As desiring stronger, goal would be getting clear and easy to specify. Desire strong enough to see daily schedule easily.

Keep the current moment the "toughest" moment

At interviewing the professional Judo athlete 'Jae Bum Kim', he said "For professional athlete, the current moment is the toughest ever always". It summarizes how to keep yourself from slump and being lagged: Putting every breathe to the road give by the Lord. A slump comes to everybody at anytime. The only medicine is time. There is no way but to keep making efforts without thinking of slump. Always dream, and push forward it.



Heaven helps those who help themselves.

Success is a simple function. The only variable is the amount of efforts measured by time.
\text{Success} = \text{Effort} (time)

금융공학도를 위한 프로그래밍 언어 (주관)

이 글은 저자의 개인적인 생각이 섞여있습니다. 저자는 프로그래밍 초짜 중에 초짜입니다. 감안하고 읽으시기 바랍니다.

글을 쓰기에 앞서, 저자의 base 언어는 C++ 이다. WIlmott forum 에서 말하기를, 금융공학에서 가장 많이 쓰이는 언어는 C++이라고 하기에, C++을 먼저 배운 것이다. (1학년 때, JAVA로 프로그래밍을 처음 배웠지만, 모조리 까먹었다.)
다음은, 업계에서 쓰이는 Top Five 언어이다. Top Five 언어

링크된 홈페이지에서 소개하는 언어는 많이 쓰는 순서대로 Python, C/C++,Java, Javascript, Ruby 이다. 저자는, 이 언어들 중 일부와, 금융공학을 하는데 필요한 프로그래밍 언어, 혹은 프로그래밍 패키지를 섞어 중요도 별로 소개한다. (저자 주관) 공대 대학원에서도 똑같은 순위가 적용된다.

MATLAB

쓰임새
공대 대학원이든, 금융공학 분야에 속해있는 사람이든 가장 많이 쓰는 언어이다. 행렬을 활용하여 모든 계산을 처리하기 때문에, 연산이 상당히 빠르고 편리하다. 또한, 원하는 프로그램을 아주 쉽게 짤 수 있기 때문에, 모델링에도 매우 편리한 이점이 있다.
장점
한 마디로 이야기해서, 현재 인류가 "계산" 이라고 부르는 모든 행위를 다 할 수 있다. 그렇기 때문에, 시뮬레이션에 가장 특화되어 있다.
단점
느리다.... 다양한 기능을 패키지로 포함하기 때문이지만 그럼에도 불구하고 엄청나게 느리다. 컴퓨터에 성능이 좋으면 상관없지만, 넷북을 쓰게 되면 실행하는데만 2분이 넘게 걸린다.
그리고 유료다. 보통 유료도 아니고, 엄청, 무지막지하게 비싼 유료다. 학교나 큰 회사에 속해 있다면 라이센스를 취득하고 있겠지만, 그것이 아니라면 그림의 떡에 불과하다. 단, MATLAB의 기본만 구현해 놓은 Octave 라는 프로그램이 있는데 이는 무료이며, 속도도 괜찮게 나온다. 다만, MATLAB의 고급기능은 구현이 안 되어있다.

Python

쓰임새
공학 (컴공 제외)에서는 주로 간단한 알고리즘을 테스트하기 위한 용도로 쓰인다. 라이브러리가 막강하고, 코드가 짧고 간결하게 나오기 떄문에 (C++에서 20줄 걸릴 것이 한 줄), 많이 애용된다.
장점
  1. 쉽다. 아주 쉽기 때문에, 많은 대학교에서 입문용 프로그래밍 언어로 쓰이고 있다. 코드가 아주 간결하게 나오는 특징이 있어서, "가장 짧은 코드 짜기" 대회가 있으면 언제나 파이썬이 1등이다.
  2. 기능이 막강하다. 라이브러리를 활용하여, C/C++과 Java를 데려올 수 있다. (커버가 된다는 얘기)
  3. 속도에서 밀리지 않는다. C++보다는 느리지만, 그래도 우리가 감식할 수 있는 수준은 아니다. MATLAB 보다는 월등히 빠르다.

단점
없다. 금융공학에서는 현재 C++ 이 가장 많은 인기를 독차지하고 있지만, 이는 기존의 언어가 가지는 Market share 효과인 것으로 보인다. 즉, 빠른 시일내에 Python으로 대체될 전망.

C/C++

쓰임새
거의 모든 프로그래밍 언어의 어머니. 절차지향언어, 객체지향언어의 시발점. 파이썬을 빠른 설계가 가능한 스위스 나이프로 비유한다면, C++은 그냥 공구상자 그 자체.
금융공학 외에 게임 프로그래밍, 시스템 프로그래밍에 많이 쓰인다. 한 마디로, 가장 Technical 한 부분에 쓰인다는 이야기.
C++ 대신에 Java를 배워도 아주 무방해보인다.
장점
    매우 빠르다. 프로그래밍 언어에서는 Java를 제외하고, 따라갈 수가 없을 정도로 빠르다. Python 에 비해 3배 정도 빠르다. (그래봤자, 우리가 느낄 수 있는 수준은 아니다.)
    프로그래밍을 하기 위해서는 Java 나 C++ 중에 하나는 배워야 할 것이다. 거의 모든 언어가 C++ 을 기초로 하기 때문에, 꼭 배워야 한다.
    금융공학에서는 가장 Dominant 한 언어이다. Quantlib 이라는 라이브러리가 개발되어 있어서, 상당히 편리하게 모형화를 할 수 있다.

단점
조오금 어렵다. 많은 부분에서 파이썬으로 대체되고 있는 실정이다.

R

쓰임새
통계 무료패키지. SPSS, SAS, Minitab 만큼이나 강력하면서도 거의 유일한 통계패키지이다.
장점
  • MATLAB 은 모델링에 특화된 툴이라면, R은 통계계산에 특화된 툴이다. 더 빠르고 안정적으로 계산이 가능하다. 금융공학에서 쓰이는 거의 모든 수학은 통계인 것을 감안하면, 그냥 배워야 한다.
  • 배우기 쉬움에도 불구하고, 은근히 전문가를 찾기가 어려운 언어다. 따라서, 잘 다룰 수 있으면 어딜가든 환영받는다.
  • 공짜이고, 아주 빠르다. C++ 을 기반으로 작동하는 듯.

Javasctipt

쓰임새 & 설명
HTML, CSS를 선수로 배운 후에, 배워야 하는 언어이다. HTML을 기반으로 작동하며, 오늘날 거의 모든 홈페이지가 자바스크립트 기반으로 쓰여있다. 웹언어에서는 독보적인 위치의 언어.

2014년 1월 7일 화요일

2014.01.07 The Business Cycle, Investor Sentiment, and Costly External Finance

Source : Journal of Finance
Published : Mar 19, 2013
DOI: 10.1111/jofi.12047

Abstract


We study how costly external finance affects investment across firms. We assume that external finance is more costly in recessions and during periods of low investor sentiment. We find that investment is less sensitive to q, and more sensitive to cash flow during such times, which is consistent with greater financial constraints. External finance causes these effects; when the economy is expanding or when investor sentiment is high, firms with high q and low cash flow issue more shares and debt and invest, thereby increasing investment-sensitivity to q, and reducing investment-sensitivity to cash flow. Share issuance plays a larger role than debt issuance, consistent with financially constrained firms preferring less leverage. We further verify our interpretations by showing that investment predicts increasing profitability more strongly when external finance is more costly, which is consistent with financially constrained firms choosing the most valuable projects.

요약하면 외부 Finance 요소에 대한 리서치. Recession 기간에는 이득보다는 Cash flow 에 더욱 민감하고, Economy expanding 기간에는 그 반대가 성립하더라. Share issuance 가 더 크게 영향을 미친다. External finance 가 더욱 민감할 때는 경제를 예측하는 행위가 더욱 의미가 있다.


Introduction Summary

지난 연구를 통해서, systematic finance cost 가 external finance 에 어떻게 영향을 미치는지 확인했다. 우리는 Business cycle과 systematic investor sentiment 를 external financing cost로 활용했다. External finance is costly means poor economic condition or low investment sentiment 를 뜻한다.

Our first hypothesis is that investment-sensitivity to growth opportunities will decline with external financing costs. We assume that all else equal, firms with more valuable growth opportunities are in greater need of external finance, as these firms ought to invest more.

Our second hypothesis is that investment-sensitivity to cash flow increases with external financing costs. (즉, 투자자의 민감도는 external financing cost와 같이 오르락 내리락 한다는 것이다.)

Our third hypothesis is therefore that firms with high growth opportunities and low cash flow actually do use more external finance when external finance costs are low.

Our fourth hypothesis is that investment will more strongly predict profitability when external finance is more costly.

We test these hypotheses with a sample of U.S. firms over a 43-year period. We use four costly financing measures: two that reflect the business cycle (an expansion dummy and an increasing industrial production dummy) and two that reflect systematic investor sentiment (the Baker and Wurgler-sentiment index and the University of Michigan-consumer sentiment index). The original investor sentiment indices are regressed on several different business cycle variables, and the residuals from these regressions are used as the investor sentiment proxies in our tests. We use the business cycle and investor sentiment proxies in the same regressions, so the effect of one is measured while controlling for the other. We get robust results with both types of measures, so in the discussion that follows when we mention "financing costs” we refer to both effects.

Our results are summarized as follows. We find that investment-sensitivity to growth opportunities is higher, and investment-sensitivity to cash flow is lower, when external finance is less costly. The findings therefore suggest the external finance costs have significant effects on both investment and employment.

느낀점

굉장히 직관적으로 알고 있는 사실을 학술적으로 검증해보는 것도 좋은 논문 주제가 된다.

2014.01.07 뉴스리뷰

Source : 매일경제, Bloomberg

중국, 교역량 3위로 올라서

중국이 세계 최대 상품교역 국가가 되었다. 하지만, 서비스 수지가 떨어지는 등 그 성장의 질은 좋지 못하다. 여기에 더해서 중국의 지방부채 역시 커다란 위협이 되고 있는 실정이다.
중국은 지방정부의 긴축을 요구하고 나서고 있다. 이렇게 되면, 당분간 중국에서의 공장유치 등은 줄어들 전망이고, 이는 중국의 성장둔화 및 디플레이션으로 연결될 가능성이 있다. 중국 제조업의 둔화는 세계 제조업의 둔화로 연결되기 때문.

중국의 지방정권 부채 위기는 어떤 영향을 불러일으킬까?

중국의 긴축이 시작되면, 중국 위안화는 크게 오를 것이다. 이를 인식한 탓인지, 달러에 비해 중국 위안화 역시 크게 오르고 있다. 세계에서 중국의 긴축을 염두에 두고 있다. 중국의 침체는 우리나라에 어떤 영향을 미칠 수 있을까?
세계 투자심리에서 우리나라는 중국, 브라질 등 Emerging Country 로 묶인다. 따라서, 우리나라에서는 꾸준히 해외자본의 유출이 일어날 것이다.

유럽판 볼커룰 폐기

유럽연합이 추진하던 은행구조 개혁안의 강도가 예상보다 낮을 것으로 보인다. 이는 미국의 압력과 응원이 작용한 것으로 보인다. 최근 미국 재무장관이 유럽을 방문하여 성장을 촉구하고 있기 때문이다. 따라서, 유럽의 은행규제는 당분간 그대로일 것으로 보인다.

Goldman and JPM Sell EMG MKT

미국이 Tapering 을 실시하면서, 중국, 인도, 러시아, 브라질의 투자의견에 대하여 "Significant Underperformance" 의견이 내려졌다. 당연한 결과. 현재 미국과 일본, 영국 등 상대적인 안전자산으로 돈이 몰리고 있다. 달러가 위안화를 제외한 모든 해외화폐에 비하여 절상하는 움직임을 보여주고 있다. 미국 주식 역시 떨어지는 움직임을 보여주고 있는데, 이는 Tapering 에서 가장 직접적인 수혜를 받는 미국 채권으로 그 움직임이 쏠리고 있기 때문이다.

Lew will push EU to avoid race to bottom on financial rule

미국 재무장관인 Jacob Lew는 유럽의 은행재정을 강화하도록 압박할 것으로 보인다.
투자자의 시선에서 유럽은 프랑스를 위시하여, 이미 투자의 매력을 잃은 상태이다.

2014년 1월 6일 월요일

2014 1주일이 지났다.

2014년이 시작하고 아주 바쁘게 살 줄 알았건만, 꼭 그런것도 아니다. 굉장히 Sluggish 한 상태.
구체적으로는

  • 계속 밍기적거리게 되고,
  • 공부를 해야 하는데 정말 머리에 들어오지 않는다.

이럴 때는 어떻게 해야 하는걸까? 정말 시간만 죽이고 있는 것이 부끄럽다.

현재 내가 하고싶은 것

  • C++ 프로그래밍 : C++ Header file 부분과 Pointer, Class까지
  • 웹 프로그래밍 : Javascript 를 활용하여 홈페이지 구축하기
  • 고전공부 - 삼국지, 수호지, 손자병법
  • 신문보면서 금융에 대한 감과 아이디어 정렬
  • 공부를 해야 하는데 정말 머리에 들어오지 않는다.

반면,

대학원 진학을 위해서 내가 해야 할 것

  • 교수님이 읽어보라는 책 읽기
  • Principle of Option Pricing 복습하기
  • JOF를 보고, 논문 아이디어 구상하기

저 중에서 3번만 하고 있는 실정이고, 나머지는 손도 제대로 안 대보고 있다. 마음이 안 가고, 정말 공부를 할 때마다 졸려서 죽을 맛인데 어찌하라는거지? 내가 하고 싶은 공부를 하면, 머리가 맑게 깨이는 느낌이다.

내가 실은 금융을 하기 싫은 것일까봐 정말 걱정이다. 내가 좋아하는 공부는 수학과 컴퓨터와 경제이지만, 금융을 안 좋아할까봐 정말 걱정된다. 신께서 내려주신 나만의 길이 있겠지만, 그것을 내가 지금까지도 못 알아채고 있을까봐 불안하다.

2014년 1월 5일 일요일

2014.01.06 TIPS

  • Author(s): Matthias Fleckenstein, Francis A. Longstaff, Hanno Lustig
  • Published: Jan 30, 2013
  • DOI: 10.1111/jofi.12032

ABSTRACT

We show that the price of a Treasury bond and an inflation‐swapped TIPS issue exactly replicating the cash flows of the Treasury bond can differ by more than $20 per $100 notional. Treasury bonds are almost always overvalued relative to TIPS. Total TIPS–Treasury mispricing has exceeded $56 billion, representing nearly 8% of the total amount of TIPS outstanding. We find direct evidence that the mispricing narrows as additional capital flows into the markets. This provides strong support for the slow‐moving‐capital explanation of arbitrage persistence.
What is TIPS?
인플레이션 (CPI) 에 Indexed 된 Treasury bond 를 말한다. 인플레이션율에 따라서 Par-value가 연동하고, 미국 정부에 의해 보증되어 있기 때문에 안전자산 중에서도 아주 안전하다. Par-value 가 연동하므로 가치또한 오르게된다. 
다만, TIPS 의 Par-value 변동은 Taxable income 이므로, 보통 펀드를 통해서 TIPS 에 투자하게 된다. 

논문 Introduction 요약 
1. 관찰 
Treasury bond 와 TIPS의 가격의 괴리를 발견했다. 그리고 이를 이용하여 Arbitrage 기회가 있음을 알아냈다. 예를 들어서, 같은 현금흐름을 주는 Treasury bond와 TIPS에 대하여, 20$의 가격차이가 나더라. 

2. 개요 
Arbitrage 의 개요는 다음과 같다. Inflation-linked CF TIPS 는 Inflation swap 을 활용하여 새로운 Arbitrage로 복사할 수 있다. 여기서 나오는 가격차이가 Arbitrage 기회이다. 

3. 해석 
이는 결코, Interest swap 의 문제가 아니다. 왜냐하면, 비슷한 다른 종류를 비교해보았더니 아니었기 때문이다. 

4. 결론 
이는 교과서에 나오는 그러한 True Arbitrage 이다. 

5. 개요소개 
이 논문의 목적은 

  • 왜 Mis-pricing이 일어나는지, 그 신호는 무엇인지
: 투자자들은 Treasury bond의 현금전환 우수성에 높은 가치를 둔다. 
  • 왜 이것은 사라지지 않고 유지되는지
: 느리게 움직이는 돈 때문에. 즉 고여있는 돈이 mispricing을 일으킬 수 있다. 

목차 
1. Describe the key notion 
2. Describe the data
3. Size of mispricing 
4. Risk on implementing arbitrage 
5. 이 괴리는 Interest rate swap 에서 온 것인가? ==> 아니더라!  
6. 괴리를 일으키는 다른 요소 고려하기 
7. Determinant 고려하기 
8. 예측이 가능한 것인가? 










2014.01.06 뉴스리뷰

1. 중국, 토빈세 점검 
* 토빈세 : 해외화폐의 급격한 유입, 유출로 인한 자국의 화폐가치의 급격한 변동을 방지하고자, 해외화폐 유출입에 물리는 세금 
*  유럽은 자국의 통화가치가 급격히 하락하는 것을 방어하고자, 토빈세를 검토하였지만 철회. 

미국은 현재, 경기회복의 기류 속에서 양적완화종료계획을 '천천히' 진행시키고 있다. 행여나 있을 수 있는 경제충격에 대비코저함. 미국은 소비가 살아나는 등 아주 강력하게 경제가 살아났음을 보여주고 있다. 당시 유럽이 토빈세를 검토할 때는, 미국이 양적완화를 종료하기 어려운 시점이었다. 따라서, 갈 곳 잃은 미국 달러의 탈출구로 중국과 유럽이 필요했고, 따라서 미국은 유럽의 토빈세 부과를 반대했을 것이다. 

하지만, 지금은 중국이 토빈세를 부과할 수 있을 것으로 보인다. 다만, 그 진행속도는 천천히 진행되어야 할 듯. 현재 중국은 Local Gov 의 채무부담과 경기회복의 의문으로 인하여 돈이 빠져나가고 있고, Shanghai 지수가 급격하게 떨어지고 있는 상태. 이는 중국의 잘못이라기보다는 미국 경기회복의 기대감으로 돈이 미국으로 가고 있는 중이기 때문. 

2. 미국 경제전망  
전미경제학회가 열렸다. 버냉키는 경제를 부양하는 기조를 유지하면서 아주 천천히 양적완화를 종료하겠다고 말했다. (비둘기파). 아마 새로이 자리에 앉게 될 옐런 역시 같은 선택을 할 가능성이 높다. 자기대에 경제가 위기에 빠지는 것은 보기 싫으니까. 

다만, 미국의 잠재 GDP 자체가 박살나서, 통화정책을 통한 경제부양은 한계가 있다는 견해또한 우세하다. 어쨋든, 미국은소비위주로 실물경제가 회복되고 있다.

3. 일본 
지난해와 대비하여 일본 엔화의 가치는 18% 하락했다. 아베노믹스의 영향이 작용한 것으로 보인다. 이미 많은 투자자들은 미국과 일본에 투자할 것을 고려하고 있다. 아베노믹스의 효과가 나타날 시점이기 때문. 



2014년 1월 4일 토요일

2014.01.05 예배 첫 참석


2014년에는 교회를 다니기로 결심했다. 이제 막 다니는 입장에서 아직 종교적 믿음은 없지만, 스스로를 구원하고 싶은 마음은 있기에 다니기로 결심한 것이다. 

그 동안 바쁘고, 일요일에는 쉬어야 한다는 핑계였지만, 교회를 나가고자 하는 마음은 늘 있었다. 기도를 하면, 그저 눈을 감고 명상하는 것과 다른 색다른 마음이 들고, 의지가 굳건해지는 느낌이 들었기 때문이다. 믿음이나 소망을 공고히하고, 스스로를 도덕적으로 인도할 수 있다는 종교의 혜택이 나를 교회로 이끌었다. 

오늘 (2014.01.04) 첫 예배를 나갔다. 좋았던 점은 다음과 같다. 
- 일요일에 늦잠을 자느라고 퍼지지 않는다. 
- 기도를 함으로써, 소망을 구체화할 수 있다. 
- 평소에는 당연하게 여겼던 많은 주위의 것들에 대하여 감사하는 마음을 갖게 된다. 





뉴스에서 흐름을 읽기

  • 뉴스는 궁극적으로 사람들의 행동이 만드는 이벤트를 다룬다. 
  • 이 세상 수많은 사람들이 만들어내는 행동 중에 뉴스거리가 되기 위해서는 그 파급력이 무시할 수 없어야 한다. 
  • 그리고 무시할 수 없는 파급력은 언제나 가장 영향력이 강한 사람이 만든다. 그리고, 모든 흐름은 가장 의지가 강한 사람의 의지를 따라간다. 
위 세 가지 원칙을 종합할 때, 우리가 뉴스를 보며 주목해야 할 사항은 명료해진다. 

   우선, 누가 가장 강한 사람인지 따져야 한다. 예를 들어, 2014.01.04 뉴스에 나온, 일본의 군국주의를 비난하는 뉴스를 보자. 이 뉴스를 볼 때, 우리가 가장 먼저 떠올려야 할 플레이어는 '미국'이다. 미국이 단 한 번도 뉴스에 언급되지 않은 상황이라도, 국제뉴스를 볼 때에는 항상 미국을 먼저 떠올려야 한다. 이렇듯, 우리는 그 뉴스가 들어있는 Field 에서 가장 강한 플레이어가 누군지 먼저 살펴야 한다. 
   그리고, 그 사람의 '주머니사정' 이 어떤지 따져야한다. 자본주의 사회에서, '돈'은 가장 강력한 동기가 되기 때문이다. 개개인의 동기는 그렇지 않을 수 있어도, 조직의 가장 강력한 동기는 '돈'과 '권력'이다. 
   마지막으로, 그 사람의 의지가 무엇인지 파악해야 한다. 대부분, 이익의 최대화가 그 플레이어의 의지이다. 따라서, 어떻게 하면 그 이익이 최대화되는지 파악해야 한다. 

2014.01.04 뉴스리뷰

참조 : 매일경제, 블룸버그

1. 브라질 헤일화 가치하락과 브라질 국채 폭락 
   브라질 헤일화 가치가 지난해 말 대비 30% 하락했다. 요인은 다음과 같다.

  • 미국 테퍼링 (Tapering, 양적완화축소) 으로 인하여 금리상승
  • 원 - 헤일화 가치 상승 

2. 미-중-일 관계
   일본의 재무장 노선은 미국의 이해관계와 괘를 같이 한다. 미국이 재정압박으로 군비를 충분히 동원할 수 없는 상황에서, 미국은 일본의 재무장을 통해 중국을 압박하고 싶기 때문이다. 미국은 일본을 통해서 중국을, 한국을 통해서 북한을 견제하고 싶어한다. 그리고 한국과 미국의 갈등을 '미 - 한 - 일 동맹' 의 틀 안에서 관리하고 싶어한다.
   중국은 자신들의 게임판 안에서, 오직 미국만을 상대하고 있다. 영토분쟁에서 "다른 국가는 빠져라" 라고 한다던지, 일본을 희토류로 위협한 전력이 그러하다. 따라서 중국은 강도높게 일본을 압박할 것으로 보인다. 그리고, 중국은 미국의 돈줄을 쥐고 있기 때문에, 미국이 중국을 본격적으로 압박할수는 없다. 따라서, 일본은 재무장을 높여나가되, 그 속도는 일본의 생각보다 느리게 진행될 가능성이 높다.

3. 양적완화 후 신흥시장 자금유출 
   미국의 양적완화축소는 시장의 급변동을 의미하고, 급변동은 언제나 안전자산의 가치상승으로 이어진다. 따라서, 일시적으로 신흥시장에서 자금유출이 일어나는 것은 자연스럽다.
   미국의 양적완화축소는 달러화의 상승, 해외화의 하락을 일으킨다. 이는 해외채권 하락으로 이어져 자본의 흐름은 자연스럽다. 이 중에서, 내수가 단단하지 않은 신흥시장의 타격이 상당할 것으로 보인다.