วันเสาร์ที่ 29 มิถุนายน พ.ศ. 2556

The Little Book of Valuation - Aswath Damodaran (ตอนที่ 1/6)

เนื้อหาในหนังสือแบ่งเป็นสามส่วนหลักๆคือ
1.       อธิบายหลักการหามูลมูลค่าหุ้นสองแบบคือแบบ intrinsic value โดยใช้ DCF กับแบบ relative valuation โดยใช้ ratio มาเปรียบเทียบกับหุ้นตัวอื่นๆที่คล้ายๆกัน
2.       แบ่งหุ้นออกเป็น 4 กลุ่มตาม lifecycle คือ young company, growth company, mature company กับ declining company และอธิบายประเด็นหลักๆในการประเมินมูลค่าหุ้นแต่ละกลุ่ม
3.       เสริมเรื่องการหามูลค่าหุ้นในอุตสาหกรรมต่างๆคือ หุ้นกลุ่ม financial service หุ้นกลุ่ม cyclical/commodity และ หุ้นที่มี intangible asset เยอะ

1.     การประเมินมูลค่าหุ้น

การประเมินมูลค่าหุ้นมีสองแบบคือ
1.       แบบ intrinsic value โดยหาจาก cash flow
บนสมมุติฐานว่า ไม่เชื่อใน market efficiency
2.       แบบ relative เปรียบเทียบกับหุ้นตัวอื่นๆที่มีลักษณะคล้ายๆกัน
บนสมมุติฐานว่า market efficient ในภาพรวม แต่อาจจะให้มูลค่ากับหุ้นแต่ละตัวผิดพลาด
เนื่องจากสมมุติฐานที่แตกต่างกัน การประเมินมูลค่าทั้งสองแบบจึงอาจจะได้ผลลัพธ์ไม่เหมือนกัน (วิธีนึงคำนวณแล้ว undervalued อีกวิธีคำนวณแล้ว overvalued) หรือแม้แต่ในวิธีเดียวกัน ก็อาจจะให้ผลไม่เหมือนกันก็ได้ (เปรียบเทียบด้วย PE แล้ว overvalued แต่คำนวณ PEG แล้ว undervalued)

2.     ข้อควรระวัง

1.       มันมี bias อยู่ในการประเมินเสมอ
1.1.     ผู้ประเมินมีมุมมองเป็นบวกหรือเป็นลบกับหุ้นตัวนั้นอยู่แล้ว
1.2.     นักวิเคราะห์ที่ต้องการรักษาความสัมพันธ์กับบริษัทที่ถูกประเมิน
1.3.     ใช้ข้อเท็จจริงในการประเมินมากกว่าตัวเลขที่เป็นความคิดเห็น
2.       ตัวเลขที่ได้จากการประเมินผิดพลาดได้เสมอ
3.       พยายามสร้างแบบจำลองการประเมินที่ไม่ซับซ้อน
ความซับซ้อนมาจากคอมพิวเตอร์ที่มีความสามารถเพิ่มขึ้น + ข้อมูลที่หาได้ง่ายขึ้น

3.     เครื่องมือที่ใช้

1.       time value of money
1.1.     เงินในอนาคตมีค่าน้อยกว่าเงินในวันนี้เพราะ(1) เงินเฟ้อ (2) ความไม่แน่นอนที่จะได้เงิน (3) ความต้องการใช้เงินในวันนี้
1.2.     ปัจจัยที่มีผลกับการคำนวณ present value คือ (1) discount rate (2)growth rate (3) ระยะเวลา
1.3.     วิธีการคำนวณมี 3 แบบ

ระยะเวลา
สูตรคำนวณ
ตัวอย่าง
Simple
ณ เวลาใดเวลาหนึ่ง
CF/(1+r)n
มูลค่าของเงิน 1,000 บาทในอีก 10 ปีข้างหน้า เมื่อคิด discount rate ที่ 8% คือ
1000/(1.08)10 = 463.19
Annuity
จำกัด
CF x (1+g) x
[1-(1+g)n/(1+r)n] / (r-g)
มูลค่าของกระแสเงินสดที่จะได้ใน 20 ปี เริ่มต้นที่ 1.5 ล้านบาทและมีอัตราการเติบโต 3% ที่ discount rate 10% คือ
(1.5 x 1.03) x [1 - 1.0320/1.1020] / (0.1 - 0.03) = 16.146
NOTE 1.5x1.03 คือเริ่มต้น 1.5 ล้านในปีที่ 0 ผ่านไป 1 ปีมี growth 3%
Perpetuity
ไม่จำกัด
CF / (r - g)
มูลค่าของปันผลคงที่ปีละ 60 บาทที่อัตราดอกเบี้ย 9% คือ 60/0.09 = 667 บาท

2.       ความเสี่ยง
2.1.     ความเสี่ยงมีผลต่อมูลค่า
2.2.     ความเสี่ยงในการลงทุนแต่ละอย่างแตกต่างกันไป
2.3.     ใน DCF ความเสี่ยงจะคิดโดยใช้ discount rate ถ้าเสี่ยงเยอะ discount rate ก็จะสูงตามไป
3.       งบการเงิน (ไม่ลงรายละเอียดนะ เพราะจะยาวมาก เอาเป็นว่าสมมุติว่ารู้อยู่แล้ว)
4.       สถิติ (รายละเอียดหาอ่านที่อื่นเอานะ)
4.1.     frequency distribution, average, median, standard deviation
-          เพื่อดูว่าค่าที่ประเมินได้ make sense แค่ไหน
-          ถ้ากลุ่มตัวอย่างมีค่ากระโดดมาก ใช้ median จะ make sense กว่าใช้ average
4.2.     correlation
เพื่อหาความสัมพันธ์ระหว่างตัวเลขสองตัว
4.3.     regression
-          เพื่อประมาณค่าที่ควรจะเป็นของตัวเลขตัวหนึ่งจากอีกตัวหนึ่ง (ถ้าตัวเลขสองตัวนั้นมีความสัมพันธ์กัน)
-          simple regression แสดงความสัมพันธ์เป็นเส้นตรง
เช่น ความสัมพันธ์ระหว่างอัตราดอกเบี้ยกับอัตราเงินเฟ้ออาจจะเป็น
Interest rate = 1.5% + 0.8 x Inflation rate ที่ R Squared (ค่าความแม่น?) = 60%

ดังนั้น ถ้าอัตราเงินเฟ้อเป็น 2% อัตราดอกเบี้ยก็น่าจะเป็น 1.5 + 0.8x2 = 3.1% ที่ความแม่นประมาณ 60%

blogอื่นๆของหนังสือเล่มนี้

วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

Created Timestamp and Updated Timestamp in Django

Added following fields in Django model for both timestamp
    created_time = models.DateTimeField(auto_now_add=True, blank=True)
    last_updated = models.DateTimeField(auto_now=True, blank=True)


NOTE: about timezone
There are 2 settings in settings.py
    TIME_ZONE = 'Asia/Bangkok'
    USE_TZ = False


if set like above, DateTimeField with auto_now and auto_now_add will use local time as indicated in TIME_ZONE, e.g. 17:00:00 (GMT+7:00)

however, if set USE_TZ = True, auto_now and auto_now_add will use UTC time, e.g. 10:00:00

Django ManytoMany Field

Sample model
class Chapter(models.Model):
    name = models.CharField(max_length=100)
    tags = models.ManyToManyField(Tag, blank=True, null=True)

Create Relationship - One by One
    new_chapter = Chapter.objects.create(name=chapter_name)
    new_tag = Tag.objects.create(name=tag_name)
    new_chapter.tags.add(new_tag)

Create Relationship - Multiple
    new_section = Section.objects.create(name=section_name, chapter=parent_chapter)
    new_section.tags = list(parent_chapter.tags)

Iterate ManyToMany relationship
    for tag in parent_chapter.tags.all():
        new_section.tags.add(tag)

วันเสาร์ที่ 15 มิถุนายน พ.ศ. 2556

Custom Field in Django with South Support

To define custom field in Django, here is an example:
detail here >> http://djangosnippets.org/snippets/2513/ and http://djangosnippets.org/snippets/1244/

class TinyIntegerField(models.SmallIntegerField):
    def db_type(self, connection):
        if connection.settings_dict['ENGINE'] == 'django.db.backends.mysql':
            return "tinyint"
        else:
            return super(TinyIntegerField, self).db_type(connection)

    def get_internal_type(self):
        return "TinyIntegerField"

in this example, db_type() tell Django to use field type tinyint if backend is MySQL

Using this custom field type, when try to migrate with South, this error happened.
 ! South cannot introspect some fields; this is probably because they are custom
 ! fields. If they worked in 0.6 or below, this is because we have removed the
 ! models parser (it often broke things).
 ! To fix this, read http://south.aeracode.org/wiki/MyFieldsDontWork

To fix this problem, add a method south_field_triple in your custom field class
detail here >> http://south.readthedocs.org/en/latest/customfields.html

    def south_field_triple(self):
        from south.modelsinspector import introspector
        field_class = self.__class__.__module__ + '.' + self.__class__.__name__
        args, kwargs = introspector(self)
        return (field_class, args, kwargs)

How to Find Foreign Key Constraints in MySQL

Detail here >> http://stackoverflow.com/questions/806989/mysql-how-to-i-find-all-tables-that-have-foreign-keys-that-reference-particular

USE information_schema;
SELECT * FROM KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id';

วันพุธที่ 12 มิถุนายน พ.ศ. 2556

How to Change Launcher Icon Size in Unity2d

detail here >> http://ubuntuforums.org/showthread.php?t=1943423
edit 4 files
1. /usr/share/unity-2d/shell/Shell.qml
   [before] width: 65
   [after] width: 50
2. /usr/share/unity-2d/shell/common/IconTile.qml
   [before]
     sourceSize.width: 48
     sourceSize.height: 48
   [after]
     sourceSize.width: 32
     sourceSize.height: 32
3. /usr/share/unity-2d/shell/launcher/LauncherList.qml
   [before] property int tileSize: 54
   [after] property int tileSize: 38
   [before] property int selectionOutlineSize: 65
   [after] property int selectionOutlineSize: 50
4. /usr/share/unity-2d/shell/launcher/LauncherItem.qml
   [before]
   [after] width: 32

วันอังคารที่ 11 มิถุนายน พ.ศ. 2556

Made To Stick (ติดอะไรไม่เท่าติดหนึบ)


 หนังสือของสำนักพิมพ์วีเลิร์น เล่าว่าทำยังไงให้แนวคิดที่เราต้องการจะถ่ายทอด"ติดหนึบ"ไปกับผู้ฟัง


หลักการสั้นๆ 6 ข้อคือ ความเรียบง่าย เหนือความคาดหมาย จับต้องได้ น่าเชื่อถือ เร้าอารมณ์และเป็นเรื่องเล่า

คำสาปของความรู้ คนที่รู้ดีอยู่แล้วย่อมไม่เข้าใจความรู้สึกของคนที่ไม่รู้ ทำให้สื่อสารกันไม่ค่อยรู้เรื่องเท่าไหร่ (เพราะจุดเริ่มต้นที่แตกต่างกัน) เหมือนคนเคาะทำนองเพลงกับคนเดาชื่อเพลง คนเคาะก็คิดว่าเพลงง่ายๆแค่นี้ ต้องรู้สิ แต่คนเดากลับคิดว่า เพลงไรของมึงวะ - -;
ในสถานการณ์จริงอาจจะเกิดระหว่างครูกับนักเรียน ผู้บริหารกับพนักงาน ...

 ถูกต้อง 100% แต่เข้าใจยาก ถ้าเลือกทางนี้ก็คือโดนคำสาปของความรู้แล้ว เลือกเอาถูก 90% แต่คนฟังรู้เรื่องดีกว่า ไม่ต้องเป๊ะเวอร์



- สถิติลอยๆที่มีแต่ตัวเลขอาจจะฟังดูน่าเชื่อถือ แต่ไม่มีใครจำได้หรอก
- เปรียบเทียบตัวเลขสถิติเฉยๆกับสถิติในบริบทที่เข้าถึงได้ เช่น
   แบบ ก. : มีพนักงานเพียง 1 ใน 5 เท่านั้นที่กระตือรือร้นกับเป้าหมายของทีมและองค์กร
   แบบ ข. : มีผู้เล่นเพียง 2 จาก 11 คนที่สนใจทำประตู
   แบบ ข.เห็นภาพกว่ากันเยอะ (โดยเฉพาะประเทศไทยที่คนบ้าฟุตบอล)
- ตัวอย่างอ้างอิงแบบสุดๆ เช่นถ้าเคยรักษาความปลอดภัยให้ทำเนียบขาวแล้วละก็ งานรักษาความปลอดภัยที่ไหนก็ทำได้ทั้งนั้นแหละ อะไรทำนองนี้

- การคิดเป็นเหตุเป็นผล(แม้จะในเรื่องที่ไม่เกี่ยวกัน) ทำให้คนตอบสนองต่ออารมณ์ความรู้สึกน้อยลง
- ความต้องการของมาสโลว์ไม่จำเป็นต้องมีลำดับขั้น เราตอบสนองความต้องการทีเดียวหลายๆขั้น หรือในขั้นที่สูงขึ้นไปก็ได้


- ภาวะสองจิตสองใจทำให้การจัดลำดับความสำคัญผิดพลาด ส่งผลให้แก่นของแนวคิดไม่ชัดเจนพอหรือคลาดเคลื่อน