Nổi bật

Mời các bạn ghé trang blog kỹ thuật trên medium

Xin chào quý bạn đọc giả, lại một tuần nữa trôi qua, không biết các bạn đã giành thời gian cho bản thân, gia đình và bạn bè như thế nào rồi. Đến hẹn lại lên, tôi sẽ tiếp tục bài chia sẻ của mình trên blog cá nhân của mình. Tuy nhiên, lần này sẽ khác với mọi khi, tôi quyết định sẽ chuyển nhà sang medium vì một vài lý do sau.

Thứ nhất, các bài chia sẻ sắp tới chủ yếu liên quan đến kỹ thuật nên cần một platform đáp ứng được format code theo chuẩn Markdown để trình bày những đoạn code được rõ ràng hơn và medium đáp ứng được nhu cầu này.

Thứ hai, wordpress hiện đã loại bỏ tính năng này và đòi hỏi phải nâng cấp lên business plan – 31$/monthly tức 372$/yearly xấp xỉ 8.7tr VND/năm, mới cho phép cài đặt plugin code highlight vào hệ thống như vậy rất tốn chi phí.

Sau cùng, các thuật ngữ tiếng Anh ngày càng nhiều và chuyên sâu, việc dịch ra tiếng Việt tuy sẽ tốt cho các bạn đọc giả khi mới bắt đầu nhưng về lâu dài sẽ khiến bài viết luộm thuộm song ngữ xen kẽ nên tốt nhất tôi quyết định dùng tiếng Anh trong các bài viết kỹ thuật của mình.

Các bài viết chia sẻ về cảm nhận và trải nghiệm tôi vẫn sẽ tiếp tục chia sẻ ở đây. Rất mong các bạn thông cảm.

DataOps 02: Spawn up Apache Spark infrastructure by using Docker.

DataOps 01: Stream data ingestion với Redpanda

Stream data ingestion

Trong bài viết What’s Next for Data Engineering in 2023? 7 Predictions, một trong những dự báo tôi đồng tình đó là Prediction #6: Data warehouses and data lakes use cases start to blur nghĩa là ta sẽ dần hợp nhất structured data và unstructured data về cùng một chỗ.

Ắt hẳn khi xây dựng Data Platform, các bạn đã từng nghe đến mô hình Kappa ArchitectureLambda Architecture. Trong kiến trúc Lambda, ta sẽ chia batch data và stream data làm hai nhánh để lưu trữ, xử lý và truy vấn dữ liệu giúp cho việc quản lý được tách bạch nhưng workload của Data Engineer sẽ bị đội lên do phải quản lý hai hệ thống cùng lúc. Ngược lại, kiến trúc Kappa hướng đến việc hợp nhất hai nhánh batch và stream lại với nhau, sau đó dùng cơ chế federated query để có thể cùng lúc lưu trữ, xử lý cũng như truy vấn dữ liệu.

Chúng ta vẫn thường thiết kế và xây dựng theo Lambda nhiều hơn Kappa dù tư tưởng của Kappa mang lại giá trị hơn về tốc độ cũng như khả năng tích hợp các microservice in real-time. Lý do khiến mọi người e ngại khi áp dụng Kappa đó là ta cần một đội ngũ rất skillfull đứng đằng sau cơ sở hạ tầng Event Driven Hub phức tạp nhằm quản trị và đảm bảo hệ thống vận hành 24/7.

Kafka là đàn anh trong distributed event streaming platform từ trước tới nay. Kafka đã đặt ra tiêu chuẩn cho các hệ thống event streaming tương tự sau này. Đã có nhiều doanh nghiệp áp dụng thành công Kafka vào trong vận hành, từ phân tích báo cáo real-time, data migration cho tới những ứng dụng AI có khả năng tương tác tốc độ cao. Tuy nhiên, khi xây dựng Kafka từ đầu, ta cần một đội DevOps có kỹ năng chuyên môn rất vững để có thể vận hành trơn tru. Vậy có đàn em nào khác cũng có sức mạnh tương tự nhưng lại dễ tiếp cận hơn không?

Redpanda là một trong những đàn em đó. Không những dễ tiếp cận trong việc quản lý, chi phí xây dựng nền tảng thấp hơn mà nhờ đó công việc của các system admin cũng đỡ vất vả hơn. Hai tính chất chính giúp cho Redpanda cho tốc độ nhanh 10x và chi phí giảm 6x đó là nhờ loại bỏ Zookeeper thay bằng Raft algorithm, code bằng C++ nên không phải đụng đến JVM. Redpanda đã được kiểm chứng bằng thực nghiệm với 200 giờ chạy test. Đặc biệt Redpanda hoàn toàn có thể tương thích với Kafka ecosystem như Kafka connect giúp ta chuyển đổi công nghệ dễ dàng hơn.

Trong bài viết này, tôi sẽ tiến hành cài đặt Redpanda như một broker sử dụng cho việc ingesting data. Các bạn có thể sử dụng link github ở đây để tiến hành cài đặt lại: https://github.com/ongxuanhong/de01-stream-ingestion-redpanda-minio

  • Data source sẽ là MySQL giả lập dữ liệu vận hành của doanh nghiệp, cụ thể là giao dịch đặt hàng của user. Bên cạnh đó sẽ là clickstream events giả lập quá trình tương tác của user trên website ecommerce.
  • Target sink ta có thể dùng S3, GCS hay Azure Blob để làm nơi lưu trữ phân tán. Tuy nhiên, tôi muốn bài viết dễ cài đặt với đa số bạn đọc, không cần tạo tài khoản trên cloud provider nên đã quyết định dùng MinIO để thay thế.
  • Để vận chuyển dữ liệu source/sink tôi sẽ cài đặt debezium cho MySQL và Kafka connect cho MinIO.

Qua năm mới 2023, tôi cũng xin chúc các bạn sẽ gặt hái được nhiều thành công trong sự nghiệp, gia đình luôn bình an và hạnh phúc.

MLOps 01: Data testing, tại sao, cái gì và như thế nào

Tôi không thích viết test và các bạn tôi cũng thế. Tại sao mình phải double công việc lên để viết test, sai thì sửa lại nhanh thôi, đâu cần phải mất thời gian như vậy. Cho đến một ngày tôi được join vào một dự án khủng, rất nhiều module và nhiều thành viên tham gia, lúc này tôi mới hiểu tại sao mọi người cần viết test và viết test từ sớm. Tôi nhận ra đó là khoản đầu tư có giá trị giúp hạn chế được technical debt về sau. Nếu để nợ này càng nhiều, về sau team bạn sẽ mất thời gian để sửa code, dự án sẽ chậm đưa ra được các features mới hơn.

Trong các dự án về Data, viết test lại càng quan trọng, nếu không có quy trình data quality management từ lúc đọc dữ liệu thô, tiền xử lý cho đến lúc train model thì toàn bộ dữ liệu down stream sẽ bị ảnh hưởng. Lúc này, ta phải mất thời gian sửa code và chạy lại toàn bộ data pipeline từ đầu, rất painful.

Bài viết này sẽ trình bày lý do tại sao ta cần viết test, test gì trên dữ liệu, test như thế nào.

Data Products for Mobile Commerce in Real-time and Real-life

🌀 The strong development trend of Mobile has helped M-Commerce – Mobile Commerce rise to become an inevitable era in the near future. 𝗠𝗼𝗯𝗶𝗹𝗲 𝗖𝗼𝗺𝗺𝗲𝗿𝗰𝗲 not only attracts attention with great utilities for users, but also is a great opportunity to help business owners develop their brands and promote online business in the Vietnamese market.

🌀 Following the development of the times, overcoming the “pain points” of customers when shopping online is one of the problems of concern. Building Data Products is one of the solutions to these problems. So how to do that?

DS-mini: Feature evaluation and model tuning

Feature vs Label
Feature vs Label

Trong thực tế, nếu tài nguyên của máy tính không là vấn đề thì ta nên sử dụng hết tất cả feature set dùng vào quá trình training và prediction. Ngược lại, việc giảm bớt được một lượng lớn feature sao cho performance của mô hình không bị ảnh hưởng nhiều nhờ vậy mà tính toán nhanh hơn sẽ là lựa chọn mà ta luôn nhắm tới.

Tiếp tục mini course, sau khi đã có predictive model cơ bản, ta sẽ tiến hành phân tích sâu hơn về việc lựa chọn feature và model tuning. Làm sao ta có thể biết trước feature mà mình tạo ra có độ tin cậy cao mà không cần phải đưa vào training? Làm sao để giảm gánh cho quá trình tính toán bằng cách loại bỏ những feature “vô dụng”? Làm sao tìm được các thông số phù hợp để mô hình cho ra kết quả dự đoán tối ưu? Tất cả sẽ được đề cập trong mục này.

Tiếp tục đọc “DS-mini: Feature evaluation and model tuning”

DS-mini: Modeling với XGBoost

ds_mini_modeling
ds_mini_modeling

Trong phần này, tôi sẽ thực hiện training trên tập dữ liệu feature đã được combine ở các phần trước. Để tiến hành thực nghiệm, ta cần phân chia tập dữ liệu thành 3 tập (train, validation, test). Ở đây, tôi lấy tương ứng tỉ lệ 70/15/15. Mục đích của việc này giúp cho model tránh bị overfitting. Đồng thời, ta có thể dùng validation set để tuning model.

Sau khi phân chia tập dữ liệu, ta sẽ dùng XGBoost để training model. Model này được đánh giá dựa trên AUC metric. Do đó, AUC càng cao, model của ta càng nắm bắt được nhiều pattern trong tập dữ liệu đồng nghĩa với việc khả năng dự đoán của mô hình cũng chính xác hơn.

Cuối cùng, ta dùng model build được để predict output cho tập test và upload submission file lên Kaggle. Tôi có thử upload 2 lần. Lần 1 chỉ gồm các feature binary trong bảng application. Lần 2 gồm các feature ở lần 1 cộng thêm các feature đã tinh chỉnh khác. Kết quả lần 2 vượt trội hơn hẳn lần 1 (0.74 vs 0.63).

Khi đã hoàn chỉnh toàn bộ các bước này, về sau khi thêm feature mới, ta chỉ việc combine features và bỏ vào model để xem kết quả có cải thiện hơn không cũng như phân tích và tuning lại các tham số cho model.
Tiếp tục đọc “DS-mini: Modeling với XGBoost”

DS-mini: Feature engineering (application)

Feature engineering là gì

“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering.”
—  Andrew Ng, Machine Learning and AI via Brain simulations

“Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.”
— Dr. Jason Brownlee from machinelearningmastery.com

Như vậy, feature engineering là tác vụ cần thiết trong quá trình xây dựng predictive model, rất tốn thời gian và công sức đòi hỏi phải có kiến thức ngành. Lý do, ta không thể đưa dữ liệu thô (raw data) trực tiếp vào bất kỳ mô hình Machine Learning nào. Nên mục tiêu của chúng ta cần làm là rút trích các đặc trưng (features) từ dữ liệu thô ban đầu này.

Vậy thế nào là một feature? Ví dụ, để nhận diện người bạn gặp là người quen hay người lạ, ta sẽ dựa vào các feature như dáng đi, màu tóc, quần áo, mắt, mũi, miệng của người đó. Trong bài toán home credit, feature có thể là các thông tin profile của người đi vay như độ tuổi, giới tính, lương hằng tháng, có bao nhiêu con, có sở hữu bất động sản không, etc.

Không nói nhiều lý thuyết nữa, ta hãy bắt tay vào feature engineering cho bảng application. Ta bắt đầu với bảng này vì nó chứa đầy đủ ID của user cả tập train và tập test, thuận tiện cho quá trình join features cũng như phân chia train/validation/test set.

Tiếp tục đọc “DS-mini: Feature engineering (application)”

DS-mini EDA: Explore Data Analysis

home_credit
home_credit

Mục tiêu của cuộc thi Home credit của Kaggle là xây dựng được mô hình dự đoán (predictive model) có điểm đánh giá (evaluation metric) AUC cao. Một mô hình Machine Learning chỉ có thể xây dựng được khi dữ liệu đầu vào đã được chuẩn bị và xử lý tốt. Kaggle cho trước tập các bảng (table), nhiệm vụ của chúng ta là biến đổi và kết hợp chúng lại thành các đặc trưng (feature) có ý nghĩa để model có thể dự đoán tốt trên tập dữ liệu chưa nhìn thấy (test set, unseen data), kết quả thực tế (label) này được giữ bí mật trên Kaggle và dùng để đánh giá các đội trong cuộc thi.

Để có thể làm feature engineering tốt, bước đầu tiên ta cần quan sát và hiểu được dữ liệu. Ta sẽ sử dụng các kỹ thuật bên thống kê gồm các số liệu thống kê và biểu đồ (visualization). Explore Data Analysis (EDA) sẽ giúp ta đánh giá, lựa chọn và biến đổi dữ liệu thành feature phù hợp cho model.

Khi đã có các phân tích từ EDA, ta sẽ có những hướng giải quyết tốt hơn khi đối mặt với các vấn đề bên dưới:

  • Dữ liệu bị NaN (Not a Number), Null (missing data), nguyên nhân từ đâu?
  • Kiểu dữ liệu không khớp (e.g. 1990.0 là kiểu số thực nhưng load lên lại là kiểu string), nên ép kiểu như thế nào?
  • Dữ liệu bị lặp (duplicate) nên chọn và bỏ bớt cái nào?
  • Dữ liệu không liên quan, có phải do nhập sai?
  • Dữ liệu bất thường (e.g. tuổi bị âm, huyết áp bằng không, ngày tháng không đúng format) nên biến đổi thế nào?
  • Dữ liệu ở dạng categorical thì nên biến đổi bằng one-hot encoding hay mapping number?
  • etc.

Tiếp tục đọc “DS-mini EDA: Explore Data Analysis”

Nổi bật

Data Science mini course

ds_mini_course

Mini course này được thiết kế dành cho những bạn còn “chân ướt chân ráo” bước vào lĩnh vực Data Science (DS). Các chủ đề sẽ xoay quanh tập dữ liệu từ cuộc thi Kaggle Home Credit Default Risk, việc này giúp cho người học tập trung kiến thức của mình vào trong ngữ cảnh là một cuộc thi. Từ đó, ta sẽ có động lực cũng như ghi nhớ tốt hơn các syntax và tình huống xử lý cụ thể trong ngôn ngữ lập trình Python.

Mỗi chương được trình bày bằng nhiều notebooks. Trong mỗi notebooks, có những đoạn code và phần ghi chú bằng Tiếng Việt cho người mới dễ theo dõi. Bên cạnh là Tiếng Anh được dùng trong những comment đơn giản. Ta có thể học bằng cách nhập lại đoạn code trên máy của mình và quan sát phản hồi. Những cú pháp khó hiểu, ta có thể tra Google để tìm hiểu thêm thông tin. Mỗi tuần, tôi sẽ cố gắng hoàn tất một chương cho đến lúc hoàn thành mini course này.

Kết thúc series, tôi hy vọng mọi người sẽ phát triển được các kỹ năng thực tế vào trong công việc, cải thiện khả năng quan sát và phân tích dữ liệu, hoặc có thể dùng course này làm tài nguyên training cho team DS của mình.

Tiếp tục đọc “Data Science mini course”

Rèn giũa mindset của một Data Scientist

analytics_diary

Trong bài viết này, tôi xin chia sẻ một vài kinh nghiệm của mình trong quá trình làm việc với Data Science (DS). Về cơ bản, tôi nghĩ các bạn cũng đã hiểu khái quát thế nào là DS, những phương pháp và ứng dụng thực tiễn của ngành này. Nên ở đây, tôi sẽ đề cập đến mindset nhiều hơn. Lý do, mindset khi làm DS sẽ khác Software engineer rất nhiều.

Ở đây, tôi sẽ tổng hợp những sai lầm mà những bạn junior hay các bạn chuyển ngành thường mắc phải. Tôi may mắn hơn mọi người là được các anh chị đi trước nhẫn nại hướng dẫn tận tình để chỉ ra những điểm chưa tốt, cho tôi nhiều cơ hội để tôi ngày càng tiến bộ hơn trên con đường mà mình đã chọn. Tôi cũng từng là một junior trong lĩnh vực này, cũng từng mắc sai lầm nên tôi muốn đúc kết lại một vài kinh nghiệm để các bạn đi sau hạn chế mắc phải.

Tiếp tục đọc “Rèn giũa mindset của một Data Scientist”

Vọc thử Orange: phần mềm data mining

orange_overview

Tôi thường nhận được nhiều câu hỏi từ các bạn ở nhóm ngành khác IT, rất quan tâm đến lĩnh vực Data mining và Machine learning, rằng họ không biết nên bắt đầu từ đâu và như thế nào, có cần phải học lập trình không, có cần phải biết xác suất thống kê không. Tôi thường trả lời rằng:

Cũng giống như bạn chơi piano vậy, bạn không cần phải học nhạc lý để có thể chơi được nhạc cụ này nhưng nếu bạn không học những kiến thức căn cơ đó, bạn chỉ chơi được ở level trung bình, chỉ đủ thoả mãn sở thích, không đi xa và lâu dài được.

Lập trình và thống kê toán là một trong các kĩ năng không thể thiếu để tiến hành xây dựng các mô hình phân tích và nghiên cứu phức tạp. Tuy nhiên, những người không biết lập trình vẫn có thể sử dụng các sản phẩm phần mềm để phân tích và xử lý thông tin ở mức cơ bản một cách nhanh chóng mà không cần biết lập trình. Điển hình là các phần mềm spreadsheet quen thuộc như Excel (Windows), Libre office Calc (Linux), Numbers (Mac OS). Ta có thể làm các thống kê trên bảng dữ liệu (sum, count, avg, stddev, quantile, etc.), transform dữ liệu, load dữ liệu từ nhiều nguồn, visualize bằng các biểu đồ trực quan, thậm chí ta có thể làm data mining nếu ta cài thêm các plugin cho chúng.

Xu hướng tương lai mà các bạn sẽ nhận thấy đó là tất cả các tác vụ hiện nay mà Data Engineer/Analyst/Scientist đang làm mỗi ngày dần dần sẽ bị thay thế bởi các công cụ automation mạnh mẽ và trực quan, tiết kiệm chi phí thực nghiệm thay vì hàng tuần, tháng chỉ cần một hai ngày là hoàn tất. Đó cũng là mục đích tiến hoá của ngành công nghiệp, cố gắng tự động hoá các công việc tay chân vất vả, nhàm chán để nhường chỗ cho con người sáng tạo ở các vai trò khác quan trọng hơn. Bản thân tôi cũng thuộc type người lười công việc tay chân, không thích coding nhiều, cái gì automation được thì tôi rất muốn thử và sử dụng ngay.

Orange là một trong những công cụ Data mining nhắm đến mục tiêu tự động hoá này. Tôi nhận thấy đây là phần mềm dễ sử dụng nhờ giao diện nhỏ gọn, các toolbox được sắp xếp hợp lý mạch lạc, ai cũng có thể bắt đầu. Trong bài viết này, tôi sẽ tiến hành phân tích dữ liệu cũng như cài đặt một số hàm Machine learning quen thuộc để cho các bạn mới bắt đầu có thể hình dung vắn tắt một pipeline làm việc với dữ liệu thì sẽ như thế nào.

Bài viết sẽ bắt đầu bằng lược đồ overview của workflow mà bạn đang quan tâm rồi mới đi vào chi tiết từng thành phần. Trong quá trình hướng dẫn, những bước đã được trình bày, tôi sẽ lướt qua và chỉ đề cập đến các bước mới. Ở mỗi phần, tôi cũng dẫn link đến file Orange workflows (*.ows) để các bạn có thể download về tham khảo.

Tiếp tục đọc “Vọc thử Orange: phần mềm data mining”

XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle

xgboost_illustrate

XGBoost là viết tắt của Extreme Gradient Boosting. Đây là thuật toán state-of-the-art nhằm giải quyết bài toán supervised learning cho độ chính xác khá cao bên cạnh mô hình Deep learning như chúng ta từng tìm hiểu.

Nếu Deep learning chỉ nhận đầu vào là raw data dạng numerical (ta thường phải chuyển đổi sang n-vector trong không gian số thực) thì XGBoost nhận đầu vào là tabular datasets với mọi kích thước và dạng dữ liệu bao gồm cả categorical mà dạng dữ liệu này thường được tìm thấy nhiều hơn trong business model, đây là lý do đầu tiên tại sao các cá nhân tham gia Kaggle thường sử dụng.

Bên cạnh đó, XGboost có tốc độ huấn luyện nhanh, có khả năng scale để tính toán song song trên nhiều server, có thể tăng tốc bằng cách sử dụng GPU, nhờ vậy mà Big Data không phải là vấn đề của mô hình này. Vì thế, XGBoost thường được sử dụng và đã giành được nhiều chiến thắng trong các cuộc thi tại Kaggle.
Tiếp tục đọc “XGBoost: thuật toán giành chiến thắng tại nhiều cuộc thi Kaggle”

FAQ: Big data cho người mới bắt đầu

Cảm ơn TopDev và các bạn trẻ đã tổ chức và hỗ trợ tôi hoàn thành tốt buổi chia sẻ hôm thứ bảy 30/09/2017 vừa qua. Mặc dù trời mưa to, nhưng các bạn khán giả vẫn tham gia khá đầy đủ. Tuy có nhiều phần chưa đáp ứng được mong đợi của mọi người nhưng phần hỏi đáp luôn là phần sôi động nhất đã lắp được phần nào khoảng trống này. Hy vọng, mỗi bạn đều đem về được những kinh nghiệm thiết thực khi đụng đến công nghệ xử lý Big Data, cụ thể là Apache Spark. Bên dưới, tôi xin tổng hợp lại các câu hỏi thường gặp trong buổi chia sẻ này cùng với Slide chứa notebook về Spark bên trên. Nếu bạn nào có thêm câu hỏi, mình sẽ cập nhật vào bài viết này để thêm phần phong phú cho các bạn khác tìm hiểu và tham khảo.

Notebooks:

Các event trước:

Thế nào thì được gọi là Big Data?

Big Data thoả tính chất 5V thì được gọi là Big. Cá nhân mình thấy 3 điểm sau thì đã gọi là Big rồi.

  1. Dữ liệu phức tạp (unstructured data).
  2. Tốc độ phình to nhanh, tính theo giây.
  3. Không thể xử lý với các công nghệ trước đó.

Có cần phải học thêm bằng cấp nào không?

Các nhà tuyển dụng hiện tại xem kinh nghiệm quan trọng hơn bằng cấp. Một số công nghệ nên biết: Docker, PostgreSQL, MongoDB, Apache Spark, Bash shell, AWS, Kafka, Jenkins.

Nếu bạn có thêm các Certificate cloud computing sau thì cũng có thể tạo nên lợi thế riêng:

Tiếp tục đọc “FAQ: Big data cho người mới bắt đầu”

AI, Machine Learning, Deep Learning phân biệt như thế nào cho đúng

AI là một thuật ngữ cao siêu mà có lẽ ai cũng từng nghe qua. Lấy cảm hứng từ bộ phim hoạt hình Baymax (Big hero 6), một chú robot thông minh phục vụ và chăm sóc sức khoẻ con người, cũng như có bạn đọc yêu cầu giải đáp thuật ngữ này nên tôi quyết định dành ra một góc để nói về AI.

Bài viết nhằm mục đích làm sáng tỏ cho những bạn chưa phân biệt được các khái niệm AI, Machine Learning – ML và Deep Learning – DL. Dĩ nhiên, người trong ngành phân biệt điều này khá dễ nhưng để có thêm thông tin bổ ích tôi sẽ tổ chức lại kiến thức liên quan để bạn đọc quan tâm tìm hiểu và tiện tra cứu tài liệu hơn.

Tiếp tục đọc “AI, Machine Learning, Deep Learning phân biệt như thế nào cho đúng”

Truy vấn văn bản – Document Retrieval

wikipedia

Giả sử bạn đang đọc một bài viết nào đó, hệ thống truy vấn văn bản sẽ giúp bạn tìm kiếm những bài viết tương tự như bài viết của bạn đang đọc. Vậy làm sao ta có thể tính được độ tương tự giữa các văn bản để tìm kiếm trong vô số các tài liệu có sẵn, tỷ lệ giống nhau về nội dung của các văn bản là bao nhiêu?

Trong bài viết này, ta sẽ sử dụng tập văn bản liên quan đến những người nổi tiếng download từ wikipedia (file csv đã xử lý có thể download ở đây) để xây dựng hệ thống truy vấn văn bản dựa trên nội dung đang đọc.

Notebooks: document_retrieval.ipynb

Hệ thống recommend bài nhạc

iTunes

Một trong những công nghệ giúp cho đời sống con người ngày càng dễ dàng hơn đó là recommender system. Recommender system giúp kết nối người dùng với sản phẩm mà họ tìm kiếm được thuận tiện và nhanh chóng hơn từ đó mang lại lợi thế cạnh tranh của sản phẩm so với các đối thủ khác. Bạn có thể bắt gặp hệ thống này ở các trang xem phim, nghe nhạc, mua bán, mạng xã hội, … Về cơ bản, bạn có thể áp dụng ngay kỹ thuật này vào hệ thống của bạn thông qua các hướng tiếp cận như: Popularity – liệt kê top các sản phẩm được nhiều người quan tâm nhất, Classification – dựa vào các chủ đề mà bạn cung cấp để lọc ra danh sách sản phẩm tương ứng. Tuy nhiên, các hướng tiếp cận này đều mang tính đại chúng, không nhắm vào một cá nhân cụ thể nào. Hơn nữa, không ai dễ dàng cung cấp thông tin cá nhân cho ứng dụng của bạn để có thể lọc thông tin phù hợp.

Do đó, trong bài viết này, tôi sẽ đi theo hướng tiếp cận Collaborative Filtering với hai phương pháp gồm Memory-Based Collaborative Filtering và Model-Based Collaborative filtering giúp trả lời hai câu hỏi “user nghe bài nhạc này thì sẽ có xu hướng nghe các bài như…” và “user có gu âm nhạc như bạn thì sẽ có xu hướng nghe các bài nhạc như…”. Trong đó, Model-Based sẽ sử dụng singular value decomposition (SVD) và Memory-Based sử dụng khoảng cách cosine để mô hình hóa hệ thống. Bạn có thể download dữ liệu từ đây Million Song Dataset Challenge.

Notebooks: song_recommender.ipynb
Source code:
Github.

TensorFlow – thư viện code Deep Learning

tensorboard

Bài viết này không nhằm vào hướng dẫn lập trình TensorFlow. Lý do, các bạn có thể tìm thấy nhiều source code hướng dẫn khác nhau trên internet, tự cài đặt và lập trình dễ dàng. Nếu các bạn đã có kiến thức cơ bản về Neural Network thì việc nắm bắt công nghệ này cũng sẽ đơn giản hơn rất nhiều.

Thông thường, ta sẽ đi theo flow nghiên cứu sau: vào trang https://www.tensorflow.org/ để xem qua bài giới thiệu chung chung, sau đó tiến hành cài đặt, cài đặt thất bại do conflict thư viện, cài đặt thành công, đọc source code, cài đặt thuật toán từ các tutorial, hiểu sơ sơ, bắt đầu hoang mang do có quá nhiều bài viết cần đọc và cài đặt -> mất hết cảm hứng.

Do đó, mình sẽ hướng các bạn đi theo một tiếp cận khác. Đầu tiên, ta sẽ lấy cảm hứng nghiên cứu thông qua các ứng dụng ngoài thực tế, người thật việc thật của TensorFlow. Tiếp đến, ta sẽ xem mọi người đánh giá như thế nào về mã nguồn này, có đáng để ta tiếp tục nghiên cứu không. Sau cùng, ta sẽ bắt tay vào tiến hành cài đặt và ứng dụng công nghệ cùng với các tài liệu tham khảo chất lượng đã thu thập được.

Tiếp tục đọc “TensorFlow – thư viện code Deep Learning”

Python snippet: Linear regression

features_vs_target.png

Linear regression (Hồi quy tuyến tính) thường được ứng dụng vào dự đoán giá trị số thực khi cho trước dữ liệu đầu vào. Ví dụ một số ứng dụng của Linear regression:

  • Dự đoán mức lương sau khi ra trường của một người dựa vào các thông số như điểm trung bình khoá học, số lượng các hoạt động ngoại khoá đã tham gia, giới tính, …
  • Dự đoán giá chứng khoán ngày mai dựa vào lịch sử giá trước đó, các sự kiện xã hội, số lượng vốn đầu kỳ, …
  • Bao nhiêu người sẽ share bài viết của bạn trên facebook dựa trên số lượng bạn bè, số lượng bạn của bạn bè, độ phổ biến của hashtag, những bài viết trước đó, …
  • Điều chỉnh nhiệt độ phòng dựa trên thời gian trong ngày, nhiệt độ ngoài trời, ánh sáng trong phòng, …

Tiếp tục series Python snippet (Python snippet: Visualizing, Python snippet: Thu thập dữ liệu), tuần này tôi sẽ đưa vào một vài snippet liên quan đến linear regression áp dụng trên tập dữ liệu home_data để dự đoán giá nhà dựa trên một vài thuộc tính cơ bản như số lượng phòng ngủ, số lượng phòng tắm, điểm đánh giá, …

Lý thuyết: linear regression
Source code: data-science-works
Thư viện: matplotlib, pandas, scikit-learn
Notebooks: linear_regression_snippet.

Python snippet: Thu thập dữ liệu

souping_oreilly

Trước khi có thể làm việc với dữ liệu, việc đầu tiên bạn cần làm là thu thập chúng. Có rất nhiều nguồn dữ liệu khác nhau như web, APIs, databases, những định dạng file plain text (.csv, .tsv). Sau khi thu thập, ta có thể thực hiện vài động tác chuẩn hoá dữ liệu sao cho phù hợp với nhu cầu làm việc của mình nhất.

Tiếp tục series Python snippet (Python snippet: Visualizing), tuần này tôi sẽ đưa vào một vài snippet thường gặp trong quá trình thu thập dữ liệu.
Source code: data-science-works
Thư viện: csv, json, re, collections, requests, bs4, twython
Tiếp tục đọc “Python snippet: Thu thập dữ liệu”

Command line thường dùng

Linux is sexy.jpg

Trong quá trình phân tích dữ liệu, tôi thường làm việc trực tiếp trên môi trường UNIX. Nơi mà bạn chỉ có màn hình nền đen chữ trắng (terminal, command line) để tương tác với hệ thống (thu thập, quan sát, chỉnh sửa, chia sẻ dữ liệu). Lý do là vì bạn thường phải thuê server bên ngoài như Amazon và họ chỉ cung cấp cho bạn môi trường tương tác chính là từ dòng lệnh. Bài viết này xin tổng hợp lại những command line mà tôi thường dùng nhất để tiện cho các bạn mới nhập môn tham khảo và áp dụng.

Hy vọng sự linh hoạt của các dòng lệnh này có thể giúp bạn trở thành một nhà khoa học dữ liệu hiệu quả và năng suất hơn. Bạn sẽ học được cách kết hợp các công cụ dòng lệnh nhỏ nhưng mạnh mẽ này với nhau để nhanh chóng thu thập, khám phá và xây dựng mô hình dữ liệu của bạn.

Tiếp tục đọc “Command line thường dùng”