You can query DBA_TAB_STATS_HISTORY to get the list of when a table had stats gather on it. For example
SQL> select STATS_UPDATE_TIME
2 from DBA_TAB_STATS_HISTORY
3 where OWNER = 'ASKTOM'
4 and TABLE_NAME = 'ATE_QUESTION_VIEWS'
5 order by 1;
STATS_UPDATE_TIME
-----------------------------------------------
22-FEB-18 11.24.21.709000 PM +08:00
22-FEB-18 11.44.27.112000 PM +08:00
23-FEB-18 10.00.28.915000 PM +08:00
(To my knowledge) we don't expose the historical histogram level data in a dictionary view, but you could perhaps get some useful information from something like
select
c.table_name
,c.column_name
,h.savtime
,h.bucket
,h.endpoint
,h.epvalue
from sys.wri$_optstat_histgrm_history h
,dba_objects o
,dba_tab_columns c
WHERE o.owner= 'ASKTOM'
and o.object_name='ATE_QUESTION_VIEWS'
and c.column_name='QUESTION_ID'
and o.object_id=h.obj#
and c.column_id=h.intcol#
and o.object_name=c.table_name
and o.owner=c.owner
order by savtime, bucket
/
but obviously, once we're digging around at that level, I can't confirm if my query is correct, or will work in different versions etc. An alternate strategy would be using the results of the first query to restore versions of the stats from various points in time, and then query the standard dictionary views.