Point Data Science Overview
Behind the scenes, Point is always listening for new wearables health data, and continually deriving new health metrics, health score updates, personalized health insights, and workout recommendations.
For a complete compatibility chart of the wearable devices and health metrics Point integrates with, see this page.
Glossary of Terms
- Raw health samples
- New data collected directly from the users’ wearables devices, which are in the device manufacturers’ proprietary data formats
- Point health metrics & Point workouts
- Derived from the raw health samples, Point health metrics are in a normalized, consistent data format across all devices - and cover more metrics than any specific device - and are in a more readily-available form for analysis and insight generation
- Point health insights
- Derived from Point health metrics and workouts, these personalized health insights help guide the user towards making better lifestyle and exercise decisions to improve their Point health scores
- Point workout recommendations
- Derived from Point workouts, these weekly workout recommendations provide the user with suggestions for next week’s workout routine
- Point health scores
- Derived from Point health metrics, and based on the user’s fitness goals, these scores between 0-100 quantify the user’s weekly progress in improving their health, by attribute (e.g. in Strength or Recovery), and overall
Raw Health Samples
Once Point has been granted permissions to access the end-user’s health data from their wearable devices, the Point listeners begin tracking updates in the user’s health data in Apple Health, Oura Cloud, and other data sources for wearables data.
A health sample is a raw data point or series of data points representing an update to the user’s health data.
Each health sample is of a specific sample type - for example AppleHealth.restingHeartRate
, AppleWatch.stepCount
, or Oura.sleep
- in the proprietary data formats specific to each device.
For a complete listing of supported sample types (including a complete listing of the mappings between raw sample types and Point health metrics), see this table.
- Some sample types are for a single data point measured at a specific time
- e.g. the user’s most recent measurement of their HRV
- Other sample types are daily time series taken each day
- e.g. the user’s total sleep duration last night, or their resting heart rate last night
- Still others are high-frequency time series data
- e.g. the user’s heart rate time series over the course of the last 24 hours, taken at 5m or intra-minute intervals
Here are some examples of health sample data:
AppleHealth.restingHR
[ { "startDate": "2022-02-26T06:05:00", "endDate": "2022-02-26T10:45:00", "sourceId": "com.apple.health.A0C08462-4C6E-4CF9-BA86-882611B6B5CD", "sourceName": "My Apple Watch", "value": 58 }, { "startDate": "2022-02-27T05:00:00", "endDate": "2022-02-27T11:32:00", "sourceId": "com.apple.health.A0C08462-4C6E-4CF9-BA86-882611B6B5CD", "sourceName": "My Apple Watch", "value": 55 }, { "startDate": "2022-02-28T07:05:00", "endDate": "2022-02-28T9:45:00", "sourceId": "com.apple.health.A0C08462-4C6E-4CF9-BA86-882611B6B5CD", "sourceName": "My Apple Watch", "value": 54 }, ... ]
AppleHealth.workout
[ { "activityId": 52, "activityName": "Walking", "calories": 1.6090531397057999, "device": "Watch5,1", "distance": 0.01928860473194773, "end": "2020-08-24T19:37:40.273-0300", "sourceId": "com.apple.health.A0C08462-4C6E-4CF9-BA86-882611B6B5CD", "sourceName": "Lucas’s Apple Watch", "start": "2020-08-24T19:36:36.545-0300", "tracked": true }, { "activityId": 59, "activityName": "CoreTraining", "calories": 44.53526530483691, "device": "Watch5,1", "distance": 0, "end": "2020-08-24T18:52:30.444-0300", "sourceId": "com.apple.health.A0C08462-4C6E-4CF9-BA86-882611B6B5CD", "sourceName": "Lucas’s Apple Watch", "start": "2020-08-24T18:42:27.205-0300", "tracked": true }, ... ]
Oura.sleep
{ "summary_date": "2022-01-05", "period_id": 0, "bedtime_start": "2022-01-06T02:13:19+02:00", "bedtime_end": "2022-01-06T08:12:19+02:00", "score": 70, ... "temperature_delta": -0.06, "rmssd_5min": [0, 0, 62, 0, 75, 52, 56, 56, 64, 57, 55, 78, 77, 83, 70, 35, 21, 25, 49, 44, 48, 48, 62, 69, 66, 64, 79, 59, 67, 66, 70, 63, 53, 57, 53, 57, 38, 26, 18, 24, 30, 35, 36, 46, 53, 59, 50, 50, 53, 53, 57, 52, 41, 37, 49, 47, 48, 35, 32, 34, 52, 57, 62, 57, 70, 81, 81, 65, 69, 72, 64, 0] }
Notice that the health sample data format varies between devices, and different data is available depending on the device.
Point collects data across all the available data sources, and (where possible) normalizes the data into a consistent Point proprietary data format, so that health data can be used across devices.
Every time a new health sample arrives in any one of the tracked data sources, the Point listeners collect the new health sample and store it into the Point database for processing.
Point then begins to process this new health sample into a more convenient form for analysis, including any additional health metrics that can be derived from this new data.
Point Health Metrics & Point Workouts
When a new raw (unprocessed) health sample arrives in the Point database, the Point Health server processes the raw health sample into one or more Point health metrics (or zero, if no metrics are able to be processed).
For example:
The single
AppleHealth.restingHR
input sample above would be processed into 3RestingHR
metrics in the Point database - one for 2/26, 2/27, and 2/28.The single
Oura.sleep
(sample above) would be processed into several derived sleep-related Point metrics for 1/5, like:SleepDuration
SleepLatency
SleepTemperatureChange
A new
AppleHealth.workout
or newOura.workout
sample would be processed into several derived workout-related metrics, like:WorkoutCalories
WorkoutDuration
ExertionRate
WorkoutAvgHR
And the processed
workout
event itself would also be stored in the Point database - the metrics are linked to the workout, so that we know which health metrics are associated with which workouts.
Every time Point processes a new health metric, it checks to see if it can generate new health scores, personalized health insights, and/or workout recommendations. If it is able to, it generates these derivations and stores them in the Point database for convenient access.
For a complete listing of available metrics, see this table.
If the user has multiple wearable devices, Point also normalizes and selects the canonical data source for each metric. For a complete compatibility chart between metrics, see this table.
Point Health Insights
Every time we collect a new health metric, the Point Health server checks to see if we can derive any new personalized health insights.
Currently, we have health science logic and machine learning models for insights like:
- workout intensity insights
- workout trends
- HR Zone tips
- alerts the user needs recovery
- (and much more - see this table for a list of all currently supported insights)
Point Workout Recommendations
Each week (as midnight approaches on Sunday night in the user’s local time), the Point Health server analyzes the last 1 month of the user’s workouts, and recommends the optimal workout routine for the user for next week.
Currently, we use an optimization algorithm to find the best possible workout routine (in terms of total calories burned) from the user’s preferred types of workouts and their average time available to work out in a given week.
In the future, we’ll be building machine learning-based recommender systems to automatically suggest workout recommendations, and have plans to integrate with data sources of local workout classes, so that we can suggest specific workout classes and exercises to the user.
Point Health Scores
When giving Point permission to access their wearables health data, users may also set a goal, such as weightLoss
or athleticPerformance
.
Based on their goal, we use Point’s proprietary health scoring algorithm to give the user a score between 0 - 100 for their weekly progress in Strength
, Recovery
, and Endurance
.
The Point health scoring algorithm is as follows:
Look at the user’s metrics for this week
Based on the user’s goal, rate each metric as
Poor
,Average
, orExcellent
- The user gets 0 points for
Poor
metrics, 0.5 points forAverage
, and 1 point forExcellent
- For example,
- If the user’s goal is
athleticPerformance
, we rate their averageRestingHR
for this week:- more than 80 bpm → Poor
RestingHR
(0 pts) - 61 - 80 bpm → Average
RestingHR
(0.5 pts) - less than 61 bpm → Excellent
RestingHR
(1 pt)
- more than 80 bpm → Poor
- If the user’s goal is
weightLoss
,RestingHR
is not taken into account for theirRecovery
score - instead, just theirSleepDuration
matters.
- If the user’s goal is
- The user gets 0 points for
Based on their goal, we weight the metric points differently, to arrive at weekly health attribute scores, for
Strength
,Endurance
, andRecovery
.- Note: we actually scale these raw 0-100 scores to give even users with
Poor
in every metric at least a score of 20, and scale it so that it gets successively harder to get 100 if they’re close toExcellent
in every metric.
- Note: we actually scale these raw 0-100 scores to give even users with
Finally, depending on the goal, we weight the health attribute scores differently to arrive at a weekly overall health score.
- If the user’s goal is
weightLoss
,Strength
is given a weight of 2Endurance
is given a weight of 1Recovery
is given a weight of 0.5
- If the user’s goal is
athleticPerformance
,Endurance
is given a weight of 2Strength
is given a weight of 1Recovery
is given a weight of 0.5
- If the user’s goal is
Next Steps
Learn more about Point's Health Metrics.