가장 중요한 것.
분석 과정에서의 가정과 방법의 정당함.
과정에 헛점이 있으면 결과는 아무 쓸모가 없다.
과정에 대한 철저한 검증없이 나온 데이터로 의사결정을 하는 건
'동전 던지기'를 하는것과 하나도 다르지 않다.
전체 프로세스에 대해서,
일말의 의문도 없을 정도로 공격하는 동료가 필요하다.
받아들이고, 까고,
까고, 받아들이고,
술마시고 히히덕 거리는 그런 관계.
가장 중요한 것.
분석 과정에서의 가정과 방법의 정당함.
과정에 헛점이 있으면 결과는 아무 쓸모가 없다.
과정에 대한 철저한 검증없이 나온 데이터로 의사결정을 하는 건
'동전 던지기'를 하는것과 하나도 다르지 않다.
전체 프로세스에 대해서,
일말의 의문도 없을 정도로 공격하는 동료가 필요하다.
받아들이고, 까고,
까고, 받아들이고,
술마시고 히히덕 거리는 그런 관계.
#1
<slide>
# Devs Love Bacon: Everything you need to know about Machine Learning in 30 minutes or less
# twitter에서는 pig를 가지고 ML을..
https://speakerdeck.com/u/lintool/p/large-scale-machine-learning-at-twitter
<paper>
# Trustworthy Online Controlled Experiments: Five Puzzling Outcomes Explained
http://blog.markus-breitenbach.com/2012/07/06/puzzling-outcomes-in-controlled-experiments/
http://glinden.blogspot.kr/2012/07/puzzling-outcomes-in-ab-testing.html
controlled experiments (=A/B test)의 결과가 이상하게 나왔을때의 이유와 어떻게 해야될지에 대한 경험..
1. the OEC for a Search Engine
- OEC (overall evaluation criterion)을 무엇으로 하는가가 중요하다.
- 잘못된 검색엔진의 결과 => 쿼리수 상승, 수입증가(광고클릭 증가)
- ??? => 원하는 검색결과가 나오지 않아서 클릭을 많이 했다. => 장기적으로 유저감소
- distict queries/month = users/month * sessions/user * distinct queries/session 로 decompose..
- distinct queries/session 는 검색엔진의 성능이 떨어져도 상승
- sessions/user 를 봐야 실제로 성능이 좋아졌는지 판단 가능하다.
2. Click Tracking
- 속도 감소 => 유저클릭 증가??
3. Initial Effects Appear to Trend
- primacy : 기존 유저가 바뀐데 적응을 못해 수치가 적게 나옴
- novelity : 기존 유저가 새로운 기능을 모두 눌러봐서 (궁금해서) 수치가 높게 나옴
=> new user만 측정?
=> 초기 7일 제거?
=> 분석 기간의 연장?
4. Experiment Length and Statistical Power
- 분석기간을 늘린다고 CV(coefficient variable)이 낮아지지 않는 경우도 있다.
=> 적당한 분석기간 필요
5. Carryover Effects
- bucket test를 했던 유저의 경우에 test가 끝나도 일반유저와 동일한 수치가 되려면 시간이 필요하다.
=> A/A test 필요
=> bucket 테스트 마다 user를 indepent 하게 선택
<term>
# controlled experiments = A/B test = bucket test (거의 유사, 미묘한 차이..)
# 구글 판다 & 팽귄
http://googlekoreablog.blogspot.kr/2012/07/blog-post.html
- 구글 코리아에서 구글 판다 알고리즘이 한국에도 적용되었다고 함.
- 구글 판다는 사이트 품질의 높고 낮음을 평가하는 ML기반 알고리즘.
- 구글 팽귄은 주로 SEO를 악용한 사이트의 랭킹을 낮추는 알고리즘.
# 구글 판다
http://en.wikipedia.org/wiki/Google_Panda
aimed to lower the rank of "low-quality sites" or "thin sites", and return higher-quality sites near the top of the search results.
- scraper sites
- thin content sites
- similar content sites
- badly structuerd sites
# 구글 팽귄
http://en.wikipedia.org/wiki/Google_Penguin
The update is aimed at decreasing search engine rankings of websites that violate Google’s Webmaster Guidelines by using black-hat SEO techniques such as keyword stuffing,cloaking, participating in link schemes, deliberate creation of duplicate content, and others.
# keyword stuffing
- Coloring text the same as the background color
- Positioning text far away from the center of the webpage
- Putting text behind a picture so that it cannot be seen
<etc>
# sed one line
http://sed.sourceforge.net/sed1line.txt
# awk one line
http://www.pement.org/awk/awk1line.txt
Intuition : 직관(력), 직관적 통찰(력), 직각(直覺)........ 〈철학〉 직관, 직각; 직관에 의해 얻은 진리, 직관적 지식...
판단·추론 등의 매개 없이 대상을 직접 인식하는 작용, 또는 그 결과로 얻은 내용. 직관은 그것을 어떻게 포착하느냐에 따라 여러 가지 의미를 가진다.
[#M_더보기|접기|① 인식의 소재를 주는 감성적 직관은 개별적인 것에 직접 관계하며 사고가 그것을 사유하므로, 보편적인 것에 대한 인식이 생긴다. I. 칸트의 철학에서 대상의 인식조건으로서 직관과 개념을 말하는 것은 이런 의미다.
② 인식의 최고단계로서의 직관은 플라톤에서의 이데아의 직관, B. 스피노자에서의 직관지(直觀知)로 모든 감성적 경험, 오성적(悟性的) 사고를 넘어선 실재(實在)를 포착하는 직관이다.
③ 인식의 기초에 관계된 직관은 어떤 추론(推論)에도 매개되지 않고 추론의 기초를 이루는 원리를 포착하는 직관이며, 예를 들어 R. 데카르트의 명증지(明證知)는 이런 의미에서의 직관이다. 또 M. 셸러의 실질적 가치윤리학은 감정에 의해서 <아프리오리(선험적)>한 실질적 가치를 직관하는 감정적 직관주의이다.
④ 대상과의 합일로서의 직관은 어떤 매개도 필요없는 직관의 성격으로, 보는 것과 보여지는 것의 대립을 지양하고 양자의 합일에 이른다. H.L. 베르그송은 대상과 합일되는 직관에 의해서만 세계의 내적 본질인 생명의 약동이 포착된다고 하였고, 신비주의에서는 신비적 직관은 절대자와의 합일을 가능하게 한다고 하였다. .............. (Yahoo 백과사전 : 직관)
전문성 (expertise) 은 경험에 기초한 패턴식별과 연관 (pattern discrimination and association) 이다. 그것은 직관적 (intuitive) 이다. 그것을 몇개의 규칙과 이론으로 환원할수 있다는 증거는 없다. 따라서 AI 는 규칙들과 원리들을 (rules and principles) 사용하여 만들어지지는 않을 것이다. 지능 (intelligence) 이라는 것이 그렇게 만들어지지는 않는다. .......... (Stuart Dreyfus)
_M#]새로운 시점에서 전체구조를 파악하는 일. 문제해결이나 학습의 한 원리이며, 시행착오와 대비되는 말이다.
[#M_더보기|접기|독일 게슈탈트심리학자 W. 쾰러는 굶긴 침팬지를 대상으로 실험을 하였는데, 침팬지 우리 바깥쪽에 바나나를 놓아두고 침팬지에게 하나는 짧고 하나는 긴, 연결이 가능한 막대기 2개를 주었다. 잠시 후 침팬지는 막대기를 길게 연결하여 바나나를 끌어당기는 데 성공하였다. 이와 같이 통찰은 도구의 발견·사용·제작과정에서 자주 볼 수 있으며, 경험의 재구성 및 구조전환 등이 핵심이 된다. 또한 통찰은 몇 분간 주저한 뒤 갑자기 일어나며 그 결과는 잊혀지지 않는다. 임상심리학에서는 심리요법을 하는 동안 환자가 지금까지 억압에 의하여 의식할 수 없었던 갈등을 알게 되는 것을 통찰이라 하는데, 지적으로 이해되는 것이 아니라 자아가 강화되는 것을 말한다. .............. (Yahoo 백과사전 : 통찰)
BC 300년경의 고대 그리스의 물리학자 Archimedes에게는 한 가지 풀어야 할 문제가 있었다. 당시 왕이었던 Hiero가 새로 만든 왕관이 순금으로 만들어 졌는지 아니면 다른 금속이 섞여 있는지를 물어왔던 것이다. 덩어리로 있을 때에는 단순한 문제이지만 모양이 복잡한 왕관에서는 이 문제가 그리 간단치가 않았다. Archimedes는 목욕탕에서 물이 가득 찬 욕조에 앉자 넘쳐나는 물을 보고 이 문제를 해결할 방안을 찾아냈다. 그는 "유레카!"를 외치면서 알몸으로 거리를 내달렸다.
그가 찾아낸 방법은 물을 가득 채운 그릇에 왕관을 넣고 그 왕관에 의해 넘쳐나는 물의 양을 측정한 후에 왕관과 같은 무게의 순금 덩어리를 물에 담그고 나서 넘쳐나는 물의 양과 비교해 보는 것이었다. Archimedes는 이를 통해 그 왕관이 순금으로 만들어지지 않았다는 사실을 밝혀냈다. 이러한 발견을 하기 위해서 그는 통찰 (insight) 에 의존했던 것이다. 통찰은 외현적인 시행착오가 아니라 정보의 정신적 조작을 통해 문제의 해결에 접근하는 것을 말한다.
통찰은 "아하!" 경험이라는 말로도 특징지워진다. 즉, 문제에 대한 해결책이 갑작스럽게 머리 속에 떠오른다는 것이다. 아무런 관련 정보 없이 문제의 해결책이 갑작스럽게 머리 속에 떠오르는 것은 아니다. Archimedes는 무게가 동일한 금속들의 부피(즉, 밀도)가 각기 다르다는 사실을 이미 알고 있었다. 금은 그 밀도가 다른 어떤 금속보다 높으며, 밀도가 낮은 은이나 동으로 떼어낸 금만큼의 무게를 대신하려면 그 부피가 증가되어야 한다. 따라서 모양이 복잡한 왕관이 순금으로 만들어졌다면 물에 넣었을 때 넘치는 물의 양은 동일한 무게의 금덩이에 의해 넘치는 물의 양과 동일해야 한다. Archimedes는 바로 이것을 발견한 것이다. 통찰을 위해서는 문제와 관련된 기본적인 지식(개념)들이 활용 가능한 상태로 준비되어 있어야 하며 이미 어느 정도의 시행착오를 겪어야만 가능한 경우도 있다. ............... (오세진 1999)
_M#]# 지식
package xxxxx;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.OutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.pig.builtin.PigStorage;
import com.hadoop.mapreduce.LzoTextInputFormat;
public class LzoPigStorage extends PigStorage {
private String delimiter = null;
public LzoPigStorage() {
super();
}
public LzoPigStorage(String delimiter) {
super(delimiter);
this.delimiter = delimiter;
}
@Override
public InputFormat<LongWritable, Text> getInputFormat() {
return new LzoTextInputFormat();
}
@Override
public OutputFormat getOutputFormat() {
return new TextOutputFormat();
}
}
// 사용
register 파일명.jar;
A = load 'data_path' using xxx.LzoPigStorage('\t') AS (.....);
# 첨가.
https://github.com/kevinweil/hadoop-lzo 로 변경해서 설치할것.
참고 : http://upepo.tistory.com/174
-------------------------
1. lzo 설치
./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \
-file .../wordcount.py \
-file .../hstream.py \
-mapper '.../wordcount.py -m' \
-reducer '.../wordcount.py -r' \
-input input_data \
-output output_data
#!/usr/bin/env python
from hstream import HStream
import sys
import re
from collections import defaultdict
class WordCount(HStream):
def mapper(self, record):
for word in " ".join(record).split():
self.write_output((word,1))
def reducer(self, key, records):
total = 0
for record in records:
word, count = record
total += int(count)
self.write_output((word,total))
if __name__== '__main__':
WordCount()
y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x) y, y_backup = tee(FunctionWithYield())
for x in y: print(x)
for x in y_backup: print(x)y = list(FunctionWithYield())
for x in y: print(x)
# can iterate again:
for x in y: print(x)