Author Archives: Angemon

Data Crawling Using Google Script

สวัสดีท่านผู้อ่านอีกครั้งนะครับ ในวันนี้เราจะนำเสนอของฟรี (หรือไม่ฟรีก็ไม่แน่ใจ) ที่เจ๋งประมาณหนึ่งนั่นคือ Google Script ผมเคยลองใช้ให้ส่งเมล์ทุกวันแบบตั้งเวลาไว้ โดยแนบ Google Sheet จาก Google Drive ซึ่งคือ Daily Update ของโปรเจคหนึ่ง บอกเลยว่าผลออกมาดีเกินคาด ช่วยให้การทำงานซ้ำๆในทุกวันสนุกขึ้น

ซึ่งในวันนี้เราจะนำเสนอแนวทางการใช้งานที่กำลังน่าจะเป็นหัวข้อฮิตของช่วงนี้สำหรับ Big Data คือตอนนี้เราพูดถึงมันเยอะแต่ว่าคนทำจริงที่มีประสบการณ์มีน้อยเพราะมีข้อมูลสาธารณะให้วิเคราะห์น้อย พวกคนที่ยังไม่มีประสบการณ์ก็จำเป็นที่จะต้องหาฐานข้อมูลเหล่านั้นขึ้นมาเอง ซึ่งพอเป็นแบบนั้นเนี่ยส่วนใหญ่ก็จะนึกถึงต้องมีเครื่องที่ทำงานตลอดเวลาเพื่อดึงข้อมูลจากอินเตอร์เน็ต (หรือผมคิดคนเดียวก็ไม่รู้นะ) พอจะให้เปิดคอมทิ้งไว้ที่บ้านก็กล้วบ้านไฟตกบ้างหล่ะไฟใหม้บ้างละ จะเช่าเซิร์ฟเวอร์ก็แบบจนอ่ะนะ คืออยากมีประสบการณ์แต่ไม่ต้องเสียเงินมากอ่ะมีมั้ย (เพราะเงินเดือนมันน้อยตามประสบการณ์) บอกเลยฮะว่ามีแต่ต้องพยายามนิดนึง

วันนี้เราจะแสดงตัวอย่างการดึงข้อมูลจากฟีด (พาดหัวข่าว ในที่นี้ใช้ฟีดจากกรุงเทพธุรกิจ) แล้วมาเก็บไว้ใน Google Sheets โดยอย่างแรกเราต้องสร้าง Sheet และนำเอา id ของ Sheet นั้นๆ ออกมาก่อนโดยมันจะเป็นตัวเลขผสมตัวอักษรตรงแอดเดรสหลัง /d/ เพื่อสำหรับเขียนข้อมูลที่อ่านมาได้จากฟีดนั่นเอง จากนั้นก็เปลี่ยนชื่อของชีทที่เราทำงานอยู่ให้เป็น feed เพื่อให้ง่ายต่อการเรียกใช้

ฟีดที่เราได้มานั้นจะอยู่ในรูป XML เราจะใช้ XML Service ที่ Google มีให้มาใช้เพื่อช่วยอ่านค่าจาก XML (Google XML Service) จากนั้นก็บันทึกลงในชีท ส่วนเรื่องราวหลังจากนั้นก็แล้วแต่นักวิทยาศาสตร์ข้อมูลแล้วแหละว่าจะใช้ให้มีประโยชน์สูงสุดได้อย่างไร ส่วนโค้ดตัวอย่างอยู่ข้างล่างนี้ครับ (เพียงปรับ URL กับ Sheet ID ก็น่าจะทำงานได้นะฮะ)

function getFeed() {
  var sheet = SpreadsheetApp.openById('Sheet ID').getSheetByName('feed');

  var url = '-- Your Feed Link --';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var items = document.getRootElement().getChild('channel').getChildren('item');

  Logger.log('Found %s items', items.length);
  for(var i=0; i < items.length; ++i) {
    var title = items[i].getChild('title').getValue();
    var description = items[i].getChild('description').getValue();
    var link = items[i].getChild('link').getValue();
    var pubDate = items[i].getChild('pubDate').getValue();
    
    sheet.appendRow([pubDate, title, description, link]);
    
    Logger.log(title);
  }
}

นอกจากนี้เนี่ยเรายังสามารถสร้าง trigger ให้ฟังก์ชันของเรานั้นทำงานทุกกี่ชั่วโมงกี่นาทีก็ได้แล้วแต่ แต่ต้องไม่เยอะจนทำให้เวปเดือดร้อนนะครับ ข้างล่างเป็นภาพของข้อมูลที่ทดลองดึงมาได้ครับ ขอให้ผู้อ่านทุกท่านโชคดี ติดปัญหาตรงไหนก็โพสถาม Stack Overflow ได้นะครับ หรือจะมาถามในโพสนี้ก็ได้ ขอบคุณที่ติดตามขอให้มีโอกาสหน้าที่จะได้มาเล่าเรื่องสู่กันฟังอีก วันนี้ต้องไปก่อน

Advertisements

Stock trading with reinforcement learning

Hi, now is the time that AI will conquer the world. So, today I will introduce you a method to trade stock using AI (Simple technique, so you understand it easily — I hope). For this post, the information is for study and experiment purpose only. I don’t recommend you to buy or sell using this algorithm and if you do, please don’t blame me about that, haha. We will follow this paper and all the code that used in this experiment are in this repository (within stock_trading branch).

The reinforcement learning is teaching agent to predict the reward of the action and take the good action from the reward. By define the reward function and state space of game and using linear regression or others algorithm to calculate reward.

Let’s start. First, we will start with select a graph price of stock (in my case, I use ABICO — stock from Stock Exchange Thailand: SET — because I live in Thailand). In this experiment, I use all of data such as open, closed, high, low and volume of one day. You can see in the picture that shown graph price of ABICO (from 1990 to 1998).

Because reinforcement learning mostly use with game criteria, so I program a game from stock data. This game consist of 4 action (buy, waiting for buy, sell, waiting for sell). The game start with 5000 unit of money and when you take action buy or sell, it mean buy or sell all of your asset that you have. For evaluate the algorithm, we need a comparison algorithm which we used random action. We random each action equally and we running trading for 50,000 times of game. The result of random action is shown below, so you can see that the average is about ~2500 unit asset left (Actually,the price in this period is downside, to win the game is to wait and don’t buy anything, you will get 5000 unit left).

Distribution Money of Random Action

To use reinforcement learning, we must define the reward for the agent to understand that is it good action ?. For this game, I used the percent of profit when selling as reward, positive number for good profit and negative for loss. Also the sell action is terminal state for each buy. You can see the following algorithm which come from paper. For the Ø function, I used the history data — previous 60 days data. And to optimize computation time, I define 4 function to do a gradient descent for each action. The different is I didn’t use Deep Learning Structure but I use normal neural network with 4 output for each action, instead.

The result of this experiment is stunning, because the agent try to buy and sell continuously and a little of waiting. But finally the agent finish with around ~5000 unit left. My algorithm need a lot of improvement but I proud of it that it beat random action strategy. I think if it have more patient to wait for buy or sell, it will be smarter.

Finally, thank you for reading. I wish some of you to stand up and program AI, so we will have the best AI in this century. And please wish me for better agent maybe next time it will be better as I expect. If you have any suggestion please leave the comment.

ใช้ AI เล่นหุ้น

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

สำหรับเนื้อหานั้นไปอ่านมาจากบล็อคของต่างชาติบล็อคหนึ่งซึ่งพยายามหาลิงก์แล้วแต่ก็หาไม่เจอ ทำให้เนื้อหาอาจจะไม่ครบถูกต้องหรือมีใจความเหมือนกับต้นฉบับเท่าไหร่ โดยเริ่มต้นจากการนำกราฟของหุ้นสักตัว (ในที่นี้ใช้หุ้น ABICO ปี 1990 – 1998) จากนั้นลองให้โปรแกรมสุ่มซื้อขายแบบทุกการกระทำมีความน่าจะเป็นเท่ากัน จากนั้นดูค่าเฉลี่ยของมูลค่าเงินที่เหลืออยู่ เมื่อสิ้นการทำงาน

Distribution Money of Random Action

โดยเราจะมองเป็นการเล่นเกมนะครับ โดยให้เงินเริ่มต้น 5000 สามารถทำได้สี่อย่างคือ ซื้อ ขาย รอซื้อ และรอขาย ซึ่งถ้าซื้อคือซื้อทั้งหมดเงินที่มีเลย ขายก็ขายหมดหน่วยที่มีเลยเช่นกัน ซึ่งจะเห็นว่ากราฟค่อนข้างเป็นขาลง เราสุ่มทั้งหมด 50,000 รอบ ซึ่งค่าเฉลี่ยของการสุ่มเล่นออกมาประมาณ 2,500 ซึ่งน้อยกว่าเงินตั้งต้น นั่นคือ ทางที่รักษาเงินได้ดีคือไม่ซื้อเลยเราจะมีเงิน 5000 ชนะค่าเฉลี่ยการเล่นซะอีก เพราะฉะนั้นอย่าเล่นเลยครับหุ้น (ไม่ใช่อย่างนั้นสิ เราอยากสร้าง AI ที่ชนะค่าเฉลี่ยสิถึงจะถูก)

ในที่นี้เราจะใช้อัลกอริทึมตามงานวิจัยนี้ โดยเค้าใช้ Neural Network ผสมกับ Reinforcement Learning ในการวิเคราะห์หาค่ารางวัลของการกระทำต่างๆ เราจะมาลงรายละเอียดของการทำงานกันวันหลังนะครับ วันนี้จะมาแนะนำไอเดีย คร่าวๆก่อน ในงานวิจัยใช้ Machine learning ในการเรียนรู้การเล่นเกม Atari โดยใช้คะแนนของการเล่นเกมเป็นการตัดสิน

ส่วนของเราจะเปลี่ยนค่า reward function ให้เข้ากับเกมของเราซึ่งในที่นี้คือกำไรจากการขายหุ้นโดยคิดเป็นเปอร์เซนต์ ถ้าขาดทุนก็จะได้คะแนนติดลบ โดยนับการขายหุ้นเป็น terminal state และจากการทดลองได้ผลว่าตัว AI สามารถทำเงินได้มากกว่าค่าเฉลี่ยนั่นคือประมาณ 5000 ซึ่งเรียกได้ว่าเท่ากับไม่ซื้อเลย แต่ AI ที่ทดลองได้เป็นการซื้อขายแบบสลับกัน อาจจะมีการรอซื้อหรือขายอยู่บ้างแต่น้อย แต่ก็ทำให้เห็นว่า AI มีความฉลาดในระดับหนึ่ง ซึ่งสามารถไปทดลองเล่นได้ ที่ repository นี้ครับ (Branch : stock_trading)

บทสรุปคือ AI ที่ได้จากการทดลองยังไม่สามารถนำไปใช้จริงได้แต่ก็เป็นจุดเริ่มต้นให้หลายๆคนได้นำไปประยุกต์ใช้และศึกษาเพื่อร่วมกันพัฒนาให้ AI ฉลาดกว่านี้ได้ ในการทดลองนี้ยังไม่เคยนำไปใช้กับกราฟแบบอื่นทั้งยังไม่ได้นับรวมข้อมูลข่าวสาร ข้อมูลพื้นฐานของหุ้นลงไป ต้องขอขอบคุณบล็อคของต่างชาติคนนั้นด้วย ถ้าหาเจอจะนำมาแปะไว้เป็น reference นะครับ หวังว่าจะจุดประกายคนที่อยากพัฒนา AI กันมากขึ้น สำหรับใครมีความคิดเห็นหรือแนวทางใดๆสามารถมาแสดงความคิดเห็นไว้ได้นะครับ ลาไปก่อนพบกันใหม่ครับ

Switch to Conjugate Gradient

Since I posted about autoencoder neural network on my blog (2 years ago), there are many people visit my Github for that code, Hooray !! Thank you very much everyone. And again I have a new update for that code. I switch to use Conjugate Gradient instead of generative back-propagation. Someone may think is that take 2 years to update it, NO but i’m too lazy.

While I posting autoencoder article, I realize that we need better than normal backpropagation. So I try to explore “What is the easy way to change and what algorithm to swiched to?”. Then I found that in scipy library, it contains optimization algorithm in scipy.optimize module. So you can change the optimization algorithm whatever you want that build within scipy.optimize module. This link is refer to Github page of old autoencoder but the Conjugate Gradient is on conjugate branch.

Why do I switch to Conjugate Gradient? After I study UFLDL lesson within advance optimization part. There is a phrase say that Conjugate Gradient is better than Gradient Descent (Classic Back-propagation). So I started to study about Conjugate Descent and other advance optimization, but I don’t understand them. Finally, I found out the workaround to improve my implementation by using scipy library. If anyone have any suggestion, please comment. Thanks.

Object detection using OpenCV

หลังจากที่ห่างหายไปนานมากเป็นปีเลยทีเดียว วันนี้ก็ได้กลับมาเขียนอีกครั้ง ก็ไม่มีอะไรจะแก้ตัวครับขี้เกียจเป็นหลัก ในวันนี้จะนำเสนอเรื่อง Object detection โดยใช้ HOG และ SVM ผ่านไลบรารี่ OpenCV ซึ่งจริงๆ ใน GitHub ของ OpenCV มีโค้ดส่วนนี้อยู่แล้ว อยู่ใน samples/cpp/train_HOG.cpp ในบทความนี้แค่มาใช้ให้ดูเท่านั้นครับ สำหรับผมใช้ Ubuntu 14.04 และ OpenCV เวอร์ชัน 3 ในการพัฒนาโปรเจคนี้ครับ

ภาพรวมของโปรเจคนี้มีสองขั้นตอนครับ คือเตรียมข้อมูลและ Train model ซึ่งเป็นหน้าที่ของโค้ด train_HOG ของ OpenCV การทำงานของ train_HOG.cpp คือการนำข้อมูลนำเข้าทั้ง Positive และ Negative ไป train โมเดล linear SVM ซึ่งมีการปรับแก้ไขโค้ดเล็กน้อยเพื่อให้เข้ากับโปรเจคที่เราจะทำ นั่นคือการทำ iPhone detection สามารถเข้าไปดูได้ที่ link นี้

ขั้นตอนแรก การเตรียมข้อมูล ข้อมูลประกอบด้วยข้อมูลสองชนิด (Positive, Negative) เริ่มต้นจาก Negative มันคือภาพที่ไม่ใช่วัตถุที่เราจะตรวจจับ ซึ่งเอามาจาก link นี้ ส่วนภาพวัตถุที่จะตรวจจับเราสามารถสร้างเองก็ได้แต่ในที่นี้จะใช้วิธี populate ขึ้นมาจากตัวอย่างที่มีอยู่หนึ่งภาพโดยใช้ opencv_creasamples หลักการคือโปรแกรมจะเอาภาพตัวอย่างไปหมุนและแปะลงบนภาพ Negative เช่นตัวอย่างด้านล่าง

Generated Data

โดยใช้คำสั่งตามข้างล่างนี้

# opencv_createsamples -img images/iphone.jpg -bg negatives/negatives.txt -info positives/positives.txt -num 3000 -bgcolor 255 -bgthresh 8 -w 40 -h 80 -maxxangle 0.5 -maxyangle 0.5

ซึ่งการจะใช้โปรแกรม opencv_createsamples จำเป็นต้องมีไฟล์ negatives.txt ซึ่งคือไฟล์ที่มีรายชื่อของภาพที่จะใช้ ซึ่งเราสามารถสร้างได้โดยใช้คำสั่งข้างล่างนี้

# ls -1 negatives/ > negatives/negatives.txt

และขั้นตอนต่อไปคือการ Train model โดยใช้ train_HOG.cpp ซึ่งสิ่งที่ต้องมีเพื่อใช้กับโปรแกรม train_HOG คือภาพ negative 1 โฟลเดอร์ และภาพ positive 1 โฟลเดอร์ พร้อมด้วยไฟล์ .txt ที่มีรายชื่อของไฟล์ภาพทั้งหมด เพียงเท่านี้เราก็สามารถ train HOG SVM ได้แล้ว แต่สำหรับโค้ดผมจะมีการโหลดภาพทดสอบ เพื่อทดสอบโมเดลที่เรา train มาด้วย โดยคำสั่งที่ใช้ train ตามนี้ครับ

# ./train_HOG --pd=positives/ -p=positives.txt -nd=negatives/ -n=negatives.txt

ภาพผลลัพธ์ทางนี้เลยยังไม่สมบูรณ์มากแต่ก็พอเป็นแนวทางในการริเริ่มทำ object detection ของวัตถุอื่นๆ ได้ครับ ขอบอกว่า ณ ตอนนี้ OpenCV รองรับเพียง linear model ถ้าว่างๆ ผมจะลองพัฒนาโค้ดให้สามารถรับ rbf model ได้ละกัน แล้วก็ใครรู็สึกว่า model ไม่ค่อยดีเท่าไหร่ ลองดู reference ข้างล่างมีวิธีการ train แบบ Haar Cascade อยู่ ซึ่งหลายคนบอกว่าให้ผลดีกว่า HOG SVM แต่ใช้เวลาในการ train นานมาก กอไก่หลายตัว ก็ลองทำตามกันดูครับ ถ้าใครมีผลลัพธ์อย่างไรเอามาแนะนำและแบ่งปันกันก็ได้ครับ (ขอขอบคุณภาพจาก http://kooc.market/)

Using Thai font on FPDF

หายไปนานนะครับ ต้องบอกเลยว่าหาเนื้อหามาลงไม่ได้เลยในช่วงที่ผ่านมา นี่ก็โพสแรกของปีก็ว่าได้เดือนเมษาเลยนะ สำหรับช่วงนี้ผมได้มีโอกาสรับงานเกี่ยวกับการทำ PHP Web Application ซึ่งมีฟีเจอร์ต้องทำรายงาน (Report) ให้กับลูกค้าด้วย ก็หาวิธีมาหลายทางจบด้วยวิธีการที่ว่าให้เซิฟเวอร์สร้างรายงานในรูปแบบ PDF ออกมาเลยดีกว่าลูกค้าถึงไม่ปรินท์ก็สามารถบันทึกส่งเป็นเมล์ได้ ซึ่งไลบารี่ที่ใช้คือ FPDF (Free PDF) ซึ่งเป็นไลบารี่ของภาษา PHP เท่านั้นนะครับ

แต่แล้วก็เกิดปัญหาขึ้นคือจำเป็นต้องทำรายงานออกมาเป็นภาษาไทยครับ แต่ FPDF เนี่ยไม่มี font ภาษาไทยมาให้จำเป็นต้องสร้าง font ภาษาไทยขึ้นมาเองครับ ขั้นตอนการสร้าง font นี่ก็ไม่ยากสามารถไปทำตามได้ที่เว็บไซต์ FPDF > Tutorial > Tutorial ที่ 7 ครับ บอกเลยว่าไม่ยากอย่างที่คิด ซึ่งภาษาไทยใช้ cp874 นะครับ (แต่ถ้าขี้เกียจทำตอนท้ายของบทความมีให้ Download ได้ครับ ซึ่งมี THSarabun กับ Tahoma) เมื่อสร้างแล้วการที่จะนำไปใช้เนี่ยก็ง่ายมากครับ อย่างแรกให้ copy ไฟล์ THSarabunNew.php และ THSarabunNew.z ไว้ในโฟลเดอร์ font ของไลบารี่ fpdf จากนั้นเพียงแค่ AddFont เข้าไปก่อนการเรียกใช้ แล้วก็เรียกใช้ได้เลย ตามตัวอย่างโค้ดข้างล่าง แค่นี้ก็สร้างรายงานแบบ PDF ส่งลูกค้าได้แล้วครับ

<?php 
require('fpdf.php'); 

$pdf = new FPDF(); 
// Add Thai font 
$pdf->AddFont('THSarabunNew','','THSarabunNew.php');
$pdf->AddFont('THSarabunNew','B','THSarabunNew_b.php');
$pdf->AddPage();
$pdf->SetFont('THSarabunNew','',16);
$pdf->Cell(40, 10, iconv('UTF-8', 'cp874', 'สวัสดี'));
$pdf->SetFont('THSarabunNew','B',16);
$pdf->Cell(40, 10, iconv('UTF-8', 'cp874', 'สวัสดี'));
$pdf->Output();
?>

Download

Uber Dynamic Pricing Model

คราวนี้มาเป็นเรื่องแปลเหมือนกันหลายคนคงเบื่อ อย่าพึ่งเบื่อลองอ่านดูก่อน ปกติผู้เขียนเป็นคนที่ใช้บริการ Uber ระดับหนึ่งคือเปิด Uber ดูก่อนว่ามีรถใกล้ๆ มั้ย ถ้าใกล้ก็เรียกถ้าไกลก็ออกไปโบกแท๊กซี่แทน และแล้วก็ได้มีโอกาสคุยกับคนขับ ถามว่าได้เงินดีมั้ย คนขับบอกว่า ดีนะตอนแรกก็รู้สึกว่าไม่คุ้มตอนที่รับผู้โดยสาร แต่ตอนที่บิลจ่ายเงินมานั้น Uber จะมีการประกันรายได้อยู่ว่าถ้าช่วงนี้ทำไม่ได้ตามเป้าจะมีการจ่ายให้ตามเป้าด้วย เมื่อได้ฟังดังนั้นจึงเกิดการสงสัยขึ้นทันทีว่า ห๊ะ ประกันรายได้ แล้วบริษัทเอาเงินจากไหนมาจ่ายหล่ะ จึงลองไปหาดู

ปรากฎว่า ไม่ได้มีการประกันรายได้ทุกคน (ไม่รู้จริงเปล่า) ต้องเป็นคนที่ทำเควสของ Uber ได้ เท่านั้นก็เก็ทเลย จึงทำให้สงสัยขึ้นมาทันทีว่าแล้วใครคิดเควสหล่ะ แล้วรู้ได้ไงว่าจะต้องมอบเควสให้กับใคร พอลองศึกษาเพิ่มก็พบกับคำๆหนึ่งคือ Gamification เป็นเรื่องของการที่เอาองค์ประกอบของเกม มาใช้กับชีวิตประจำวันให้สนุกและท้าทายขึ้น เช่น มีระบบ Point ระบบ Level เพื่อเพิ่มความสนุกและสร้างฐานผู้ใช้ที่ดีเลยทีเดียว เพราะงั้น Uber ใช้ระบบจัดการแบบออโต้เพื่อจัดการทุกอย่างเลย อย่างโหด

Uber ยังไม่มีการเปิดเผยใดๆ เรื่องของเควส (จริงๆ แล้วหาไม่เจอแหละแฮะๆ) เนื่องจากเป็นคนชื่นชอบเรื่องอัลกอริทึม เลยลองหาดูว่าแล้วมีอย่างอื่นที่ Uber ทำหรือไม่ ปรากฎเจอเรื่อง Dynamic Pricing Model คือการปรับราคาตามความต้องการของตลาด ถ้าพูดให้ถูกภาษาเศรฐศาสตร์ คือ Supply & Demand เช่น ผู้โดยสารต้องการเยอะ Uber จะขึ้นราคาเพื่อให้คนที่ต้องการใช้บริการ Uber จริงๆ เพราะคนขับมีจำกัด เมื่อหมดช่วงเวลาเร่วด่วนก็ปรับราคากลับมาเท่าเดิม ดูเหมือนง่ายเลย แต่มีส่วนผสมในรายละเอียดของ Dynamic Pricing Model อีกมาก เช่น ต้องคาดเดาให้ได้ก่อนเกิดชั่วโมงเร่งด่วนจากนั้นจะมี notification ไปบอกคนขับว่าออกมาขับได้แล้วได้เงินเพิ่มนะ หรือการเตือนผู้โดยสารอย่างไรเพื่อไม่ให้ผู้โดยสารโมโหว่าทำไมขึ้นราคาแพงจังเลย

นอกจากนั้น Uber ยังมีการให้ผู้โดยสารให้คะแนนคนขับ และให้คนขับให้คะแนนผู้โดยสารเพื่อดูพฤติกรรมอีกด้วย นอกจากนั้นยังมีการดูว่าคนขับปฎิเสธผู้โดยสารบ่อยรึเปล่าและอื่นๆอีก ซึ่งระบบ Dynamic Pricing Model ไม่ได้มีแต่ใน Uber นะ โรงแรม สายการบินและอื่นๆ ก็ใช้ระบบนี้กันทั้งนั้น สุดท้าย Uber บอกว่าการปรับราคาตามความต้องการของตลาดนั้นไม่มีผลต่อผู้ใช้มากเท่าไหร่เพราะเมื่อผู้ใช้รู้สึกว่าแพงเกินไปไม่อยากจ่าย ก็จะพบว่าแท๊กซี่ช่วงนั้นก็หายากเช่นกัน (มันเลยแพงไง ก็ชั่วโมงเร่งด่วนหนิ) ทำให้ผู้โดยสารไม่ค่อยติมากเท่าใด

ใครสนใจลองไปอ่านต่อเพิ่มเติมได้นะจาก Reference ข้างล่าง ยังไงคราวหน้าจะเตรียมเนื้อหาให้ดีกว่านี้นะ และจะใส่รูปเพิ่มขึ้นด้วยนะ ยังไงก็ติดตามกันนะ สุดท้ายนี้อยากบอกว่าไม่ได้ค่าโฆษณาจาก Uber แต่อย่างใด ขอบคุณครับ